Nginx多域指令

时间:2015-05-05 15:17:17

标签: php nginx

我正在使用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,

1 个答案:

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