Nginx 多域指令
Nginx multiple domain directives
我在 PHP 项目中使用 Nginx。这是我在 /etc/nginx/sites-available/default
:
中所做的
server {
server_name domain_a.com;
include /etc/nginx/main.conf; // listen, php directives, etc.
location ~ (.*)\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
server {
server_name domain_b.com;
include /etc/nginx/main.conf;
location ~ (.*)\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
// Specific to this domain
auth_basic "Authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
/etc/nginx/main.conf
listen 80;
client_max_body_size 5M;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/web;
我在这段代码中有很多重复:对于两个域,两个 location
块可以合并为一个。我想我可以使用 if 语句为 domain_b 添加我的特定代码,但根据文档 http://wiki.nginx.org/IfIsEvil
这显然不是推荐的方式
你知道我该怎么做才能尊重 DRY 概念吗?
谢谢,
对我来说,我在我的 conf 中创建了一个文件夹,例如将其命名为 includes
,然后您可以将其包含在任何您想要的地方,例如
# /etc/nginx/includes/php.conf
location ~ (.*)\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
然后在你的配置中做这样的事情
server {
server_name domain_a.com;
include /etc/nginx/main.conf; // listen, php directives, etc.
include /etc/nginx/includes/php.conf;
}
server {
server_name domain_b.com;
include /etc/nginx/main.conf;
include /etc/nginx/includes/php.conf;
auth_basic "Authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
我在 PHP 项目中使用 Nginx。这是我在 /etc/nginx/sites-available/default
:
server {
server_name domain_a.com;
include /etc/nginx/main.conf; // listen, php directives, etc.
location ~ (.*)\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
server {
server_name domain_b.com;
include /etc/nginx/main.conf;
location ~ (.*)\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
// Specific to this domain
auth_basic "Authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
/etc/nginx/main.conf
listen 80;
client_max_body_size 5M;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/web;
我在这段代码中有很多重复:对于两个域,两个 location
块可以合并为一个。我想我可以使用 if 语句为 domain_b 添加我的特定代码,但根据文档 http://wiki.nginx.org/IfIsEvil
你知道我该怎么做才能尊重 DRY 概念吗?
谢谢,
对我来说,我在我的 conf 中创建了一个文件夹,例如将其命名为 includes
,然后您可以将其包含在任何您想要的地方,例如
# /etc/nginx/includes/php.conf
location ~ (.*)\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
然后在你的配置中做这样的事情
server {
server_name domain_a.com;
include /etc/nginx/main.conf; // listen, php directives, etc.
include /etc/nginx/includes/php.conf;
}
server {
server_name domain_b.com;
include /etc/nginx/main.conf;
include /etc/nginx/includes/php.conf;
auth_basic "Authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}