我在一台IIS服务器上运行多个ASP.NET应用程序,每个应用程序都有不同的端口。
我在同一台服务器上安装了nginx,以便我的客户端只能使用端口80访问我的所有应用程序。
Nginx在端口80上运行正常。我的各个ASP.NET应用程序也已启动并运行。
我在nginx conf文件中进行了这些更改
location /students/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:84;
}
location /registration/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:82;
}
然后我重新启动了nginx并在浏览器中输入了网址http://127.0.0.1/students/。 Nginx提供了404页。
我没有对conf文件做任何其他更改。
我做错了什么?
答案 0 :(得分:13)
我认为您遇到的问题与URL路径的开头有关。网址http://120.0.0.1:84/students/
是返回页面还是404?如果您希望转到http://127.0.0.1:80/students/
并查看http://127.0.0.1/
处的页面,您会发现nginx不会使用此配置为您转换路径。相反,它在代理服务器上查找完全相同的路径。
您需要将/
放在proxy_pass
指令中的网址末尾:
location /students/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:84/;
}
这是nginx配置中的一个微妙但重要的陷阱!如果您不包含反斜杠,则http://127.0.0.1:84
将被视为服务器位置。如果你有反斜杠,它将被视为一个URL,它将替换代理URL中的所有内容,直到' location'一部分。
答案 1 :(得分:0)
如果要将IIS 127.0.0.1:84/students转换为nginx 127.0.0.1/students。尝试以下代码..
location /students {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:84/students;
}
location /registration {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:82/registration;
}
答案 2 :(得分:-2)
尝试使用此指令
upstream http://localhost {
server 127.0.0.1:84;
}
和第二个
的相同块