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;
  }
}