搜索

iis nginx共用80端口

发表于 2026-10-17 06:01:34 来源:烟消火灭网

我手头有台老服务器,共用Windows Server 2012,端口跑着两个网站。共用一个是端口用ASP.NET写的内部管理系统,绑在IIS上;另一个是共用个人博客,用的端口WordPress,装在Nginx里。共用问题来了——服务器只有一张网卡,端口一个公网IP,共用80端口就一个。端口

一开始我图省事,共用给Nginx挂了个8080端口。端口结果博客域名后面老得带个冒号,共用自己看着别扭,端口分享给别人更麻烦。共用后来实在忍不住了,决定让IIS和Nginx共用80端口。

方案其实不复杂,核心思路就是让Nginx做前端代理,IIS退到后端。具体操作分三步:

第一步,把IIS的默认站点从80端口挪到8080。在IIS管理器里选中站点,点“绑定”,把端口改成8080,主机名留空就行。改完重启一下IIS,确保新端口生效。

第二步,配置Nginx。在server块里,我按域名做了分流。比如访问blog.example.com,Nginx直接本地处理;访问admin.example.com,就反代到127.0.0.1:8080。核心配置长这样:

server {  listen 80; server_name blog.example.com; # WordPress相关配置 root /var/www/blog; index index.php; # ...省略 } server {  listen 80; server_name admin.example.com; location / {  proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

第三步,处理一个容易踩的坑——IIS里的应用可能依赖原始请求的IP。我在Nginx里加了proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for,然后在IIS那边装了ARR(Application Request Routing)模块,勾选“启用代理”,这样IIS就能读到真实客户端IP了。

改完配置,重启Nginx服务,一切正常。博客还是走80端口直接访问,管理后台也还是80端口,但实际流量被Nginx导到了8080的IIS上。从外部看,两个域名都干干净净,不带端口号。

后来我又想到一个更彻底的方案——用Nginx的stream模块做TCP层转发,但这需要编译时启用模块,Windows版默认不带。折腾了半天,最后还是回到HTTP代理的老路上。说实话,HTTP代理对绝大多数场景够用了,除非你非要跑非HTTP协议。

还有个细节得提醒你,如果IIS和Nginx都配了SSL证书,那443端口也得做类似处理。不过我当时只用了HTTP,省了不少事。

这种共用端口的方式,本质上是让Nginx当“门卫”,按域名把流量分发给不同的后端。好处是显而易见的——不用额外买IP,不用改防火墙规则,用户访问体验和单服务器完全一样。坏处嘛,Nginx挂了,所有站点都瘫了。所以我给Nginx加了计划任务,每5分钟检查一次进程,挂了自动拉起。

折腾完这套配置,我算是明白了——服务器资源不够的时候,端口复用是性价比最高的解法。别被“一个端口只能给一个程序用”的思维框住,加一层代理,海阔天空。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by iis nginx共用80端口,烟消火灭网   sitemap

回顶部