Nginx与子文件夹中的多个网站

我想configurationNginx的方式,我需要最小的努力来添加新的网站。

我以下面的方式看到这一点:创build新网站时,我把它放在/var/www下的子文件夹中,在nginxconfiguration文件中添加新的位置,它只包含需要的站点types的configuration模板。 它可以看起来像这样:

 server { listen 80; server_name localhost; root /var/www; location /site1 { include drupal.conf; } location /site2 { include wordpress.conf; } } 

但不幸的是,这不适用于我的情况。 问题是嵌套的位置 。 我在包含的模板之一中有以下几行:

 ... location /core/ { deny all; } location / { try_files $uri $uri/ @rewrite; } .... 

Nginx给我以下错误:

位置“/ core /”在位置“/ site1”之外

位置“/”在位置“/ site1”之外

所以我需要为每个站点指定完整的path(比如/site1/core/ ),但是我不能把它作为一个可重用的块来提取。

以前,作为替代,我使用不同的server_namesite1.locahostsite2.localhost …)和编辑的/etc/hosts文件configuration了多个服务器指令。 在这种情况下,只要一切都在域的根目录下,我就不需要嵌套的位置。 但是,正如我所说的,我正在寻找一种方法来尽可能简化工作stream程,编辑/etc/hosts在我看来就像是我想避免的额外操作。

所以问题是如何最好地处理这种情况? 你如何在不同的地点组织工作?

在家里工作中,我使用了Bind9和Nginx的组合来解决这个问题。 它确实需要一些设置,但是一旦启动,您不需要再次触摸您的nginx配置文件。 我在底部添加了一些限制。

建立

设置一个DNS服务器,(Bind9,dnsmasq)

1)建立一个本地的DNS服务器,并创建一个名为DEV的主机2)在DEV中创建一个名字条目

 * A 127.0.0.1 

并重新启动您的DNS服务器。 3)确保你可以挖掘 * .dev并确认你得到127.0.0.1。

设置Nginx

1)在你的nginx.conf或你存储你的conf.d文件的地方,创建一个vHost条目,看起来或多或少像这样:你可以根据你的需要来调整它。

 server { listen 80; server_name *.dev; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; if ($host ~* ^(.*).dev$) { set $site $1; } if (!-d /var/www/$site/) { return 404; } location ~ index.php$ { fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_pass backend; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/$site/$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location ~ / { try_files $uri $uri/ /index.php?$args; } } 

2)重新启动nginx服务。

3)利润


一旦设置完成,要创建一个新的站点,您只需要在/ var / www /中创建一个新的文件夹即可。

 mkdir -p /var/www/sitename/ 

该网站和它下面的PHP可以通过sitename.dev访问。

如前所述,这有一些限制。 sitename必须全部小写,不包含空格或特殊字符(包括句点)。 其次,它确实只适用于通过index.php引导的网站。

如果你有完全不同的网站结构,你可以修改一些东西给你一个更强大的设置。 例如,你可以写出你的配置,使它看起来像这样。

 server { listen 80; server_name *.*.dev; [...] if ($host ~* ^(.*).(.*).dev$) { set $site $1; set $folder $2; } if (!-d /var/www/$folder/$site/) { return 404; } [...] fastcgi_param SCRIPT_FILENAME /var/www/$folder/$site/$fastcgi_script_name; [...] } 

并假设你更新你的DNS服务器来响应 .dev,那么你可以写我们的目录如下,只是给你一个想法。

 /var/www/wordpress/site1 /var/www/wordpress/site2 /var/www/wordpress/site3 /var/www/zend/site1 /var/www/zend/site2 /var/www/zend/site3 

就像我刚才所说的那样,我在家里使用这个设置,并在+15人的工作。 我们的工作设置稍微复杂一些(共享服务器,每个人都有自己的主文件夹),但是在那里工作得很好。 我个人更喜欢在子域而不是本地主机路径上工作。

希望这可以帮助!

怎么样使用nginx提供的alias函数呢?

http://wiki.nginx.org/HttpCoremodulee#alias

如果这对您的工作流程不起作用,那么符号链接到/ core目录会防止该错误?