我正在使用Nginx进行PHP项目。以下是我在/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概念?
THX,
答案 0 :(得分:1)
对我来说,我在我的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;
}
}