使用nginx作为IIS服务器的反向代理

时间:2015-10-20 01:53:05

标签: asp.net iis nginx

我在一台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文件做任何其他更改。

我做错了什么?

3 个答案:

答案 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;
 }

和第二个

的相同块