在nginx中找不到位置块

nginxconfiguration中试图找出位置块很困难。 这是我的:

server { listen 80; server_name _; access_log /var/log/nginx/example.com.access_log; error_log /var/log/nginx/example.com.error_log warn; root /var/www/root; index index.php index.htm index.html; fastcgi_index index.php; location /wp/ { root /var/www/wordpress; index index.php index.htm index.html; fastcgi_index index.php; } location ~* \.php$ { try_files $uri =404; keepalive_timeout 0; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; } } 

浏览/按预期工作,并在/ var / www / root中显示网站,但是如果位置工作,我认为他们应该浏览到/ WP应带我到/ var / www / wordpress中的WordPress安装。 我所得到的是:

404没有find

nginx的/ 0.7.67

如果我将/ var / www / wordpress目录重定位到/ var / www / root / wordpress并浏览到/ wordpress,那么这是完美的。

我在做什么错位置块?

我从来没有configuration过nginx,而且是一个完整的web newb。

我希望能够为其他应用程序提供更多的位置块。 这真的只是在这里张贴的一个基本的例子。

在Debian Squeeze backports中将nginx更新为版本。 没提升:

404没有find

nginx的/ 1.1.19

它不工作的原因是…

在服务器级别,你有“root / var / www / root”。 所以基本上,每个位置块将使用这个,除非特别重写。 这是很好的做法。

然后你可以在“wp”位置块中将其覆盖到“/ var / www / wordpress”。 但是,php位置块仍然使用默认值。

现在,当您向“/var/www/wordpress/folder_a/file_a.php”物理位置的“/wp/folder_a/file_a.php”发出请求时,该请求会触发php位置块并提供根文件夹主动为该块去查找“/var/www/root/folder_a/file_a.php”中的文件。 结果,你得到了“404找不到”。

您可以将服务器级别的根指令更改为“/ var / www / wordpress”,并删除wp位置中的覆盖。 这将解决这个问题,但“/ var / www / root”下的php脚本将不再起作用。 不知道你有没有。

如果你需要在“/ var / www / root”和“/ var / www / wordpress”下运行php,你需要这样做:

 server { ... root /var/www/root; index index.php index.htm index.html; # Keep fastcgi directives together under location # so removed fastcgi_index # Put keepalive_timeout under 'http' section if possible location /wp/ { root /var/www/wordpress; # One appearance of 'index' under server block is sufficient location ~* \.php$ { try_files $uri =404; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; } } location ~* \.php$ { try_files $uri =404; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; } } 

也就是说,在wp位置块下嵌套一个重复的php位置块。 它将继承wp的根指令。

为了让事情变得简单易行并且简化编辑等,你可以把fastcgi指令放到一个单独的文件中,并根据需要包含它。

所以在/path/fastcgi.params中,你有:

  fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; 

你的conf可以是:

 server { ... root /var/www/root; ... location /wp/ { root /var/www/wordpress; location ~* \.php$ { try_files $uri =404; include /path/fastcgi.params; } } location ~* \.php$ { try_files $uri =404; include /path/fastcgi.params; } } 

这样,如果您需要编辑任何fastcgi参数,只需在一个地方进行编辑即可。

PS。 更新你的nginx将不会解决这个问题,因为它不是一个版本问题..但无论如何更新!