请参阅以下 nginx 配置文件。
基于虚拟名称的托管(example.com),将对 example.com 和 www.example com 的请求传递到端口 9000 上的 mono fastcgi 进程(127.0.0.1:9000)
我已经添加了文件 google-site-verification,但问题是,asp.net fastcgi-application 是一个 MVC 应用程序,因此它找不到名为“google79af7e588a34905e0.html”的控制器。
我正在尝试覆盖虚拟主机配置文件中的位置,因此它不会将 google79af7e588a34905e0.html 的请求转发到 fastcgi 应用程序,但它不起作用。
我重启了 nginx,但没什么变化……
我做错了什么?我尝试删除“location = /”中的等号,但不起作用,我尝试将位置覆盖移到主位置之前,但也没用。我还来回更改了主机名,只是为了看看我是否在正确的配置文件中,结果确实如此,当我更改域名时,我开始收到 404。
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
server {
listen 80;
server_name www.example.com example.com;
access_log /var/log/nginx/your.domain1.xyz.access.log;
location / {
root /home/example/www/homepage;
#index index.html index.htm default.aspx Default.aspx;
#fastcgi_index Default.aspx;
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
}
#http://serverfault.com/questions/477103/how-do-i-verify-site-ownership-on-google-webmaster-tools-through-nginx-conf
location = /google79af7e588a34905e0.html {
rewrite ^/(.*) $1;
return 200 "google-site-verification: $uri";
}
location /doc {
root /usr/share;
autoindex on;
allow 127.0.0.1;
deny all;
}
location /shared_images {
root /usr/share;
autoindex off;
}
error_page 404 /CustomErrors/404.htm;
# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /usr/share/nginx/www;
#}
}
答案1
我会选择这种设置:
server {
listen 80;
server_name www.example.com example.com;
access_log /var/log/nginx/your.domain1.xyz.access.log;
root /home/example/www/homepage;
try_files $uri $uri/ @mvc;
location @mvc {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
location /doc {
alias /usr/share/doc;
autoindex on;
allow 127.0.0.1;
deny all;
}
location /shared_images {
alias /usr/share/shared_images;
autoindex off;
}
error_page 404 /CustomErrors/404.htm;
}
这里我们使用 nginxtry_files
指令来检查文件是否在文件系统中物理存在。如果文件不存在,则请求将传递给 MVC 后端。
我还用指令替换了root
位置内的指令alias
,因为这使得配置更加直观,至少我是这么认为的。
此设置还会使 nginx 服务器全部为静态资产,而不是让 MVC 后端也处理这些请求。您可能需要调整主块server
指令root
。
但是,此设置需要文件系统上的实际文件。
答案2
根定义上方的位置可以解决问题
location /google79af7e588a34905e0.html {
alias /your/local/path/to/google79af7e588a34905e0.html;
}
无需任何重写。