我的子域名sbd.example.org
是一个 web 服务,当请求对根目录 ( ) 执行 GET 操作时,需要返回 HTML 静态页面/
,对于其他情况(例如/t
),需要代理重写。所以我需要
- 恢复
http://sbd.example.org
正常根指数和try_files - GET
http://sbd.example.org/t
重写至代理
但我的/etc/nginx/sites-available/sbd
工作并不如预期。这是有问题的来源:
server {
server_name sbd.example.org;
root /var/www/sbd/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ ^/[a-z].+$ {
rewrite ^/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
default_type application/json;
proxy_hide_header Content-Location;
proxy_set_header Connection "";
proxy_http_version 1.1;
}
}
错误:GEThttp://sbd.example.org/
不是 HTML 页面,而是由代理作为请求生成的带有错误消息的 JSON http://sbd.example.org/index.htm
。
如何修正我的 Nginx 脚本?
附言:一切http://sbd.example.org/etc
运行良好。
答案1
相比确定需要发送到代理的内容,确定哪些文件是静态的可能更容易。
location / {
try_files $uri $uri/ @proxy;
}
location @proxy {
proxy_pass http://127.0.0.1:3000;
...
}
看这个文件了解更多信息。