我有以下配置。我正在尝试将 http 流量重定向到端口 8443。
我正在不同的端口上运行 gogs,并使用了一些技巧来实现它。
现在我们的主要门户由 IIS 7.5 保护,由于某些办公应用程序需要保持可用,因此我无法更改它。
我安装了 ARR/3.0 模块,并在 IIS 中为我的子域上的应用程序设置了代理通道。
端口 8080 和 8443 通向我的 nginx 服务器。端口 80 和 443 通向 IIS 服务器,由于应用程序需要从 IIS 服务器加载,所以我无法更改这些端口。
唯一的问题是,当我尝试通过端口 80(IIS 端口)访问我的域时,nginx 的重定向规则会被删除端口号和协议更改。我怀疑是 IIS 造成的,因为当我通过 8080 访问时,它会正确地重定向到 HTTPS。
一般的
请求 URL:http://subdomain.example.com/
请求方法:GET
状态代码:302 临时移动
远程地址:82.161.204.120:80
引荐来源政策:降级时无引荐来源
响应标头
内容长度:170
内容类型:text/html
日期:2018 年 8 月 20 日星期一 12:22:28 GMT
地点:http://subdomain.example.com/
服务器:Microsoft-IIS/7.5
X-Powered-By:ARR/3.0
X-Powered-By:ASP.NET
请求标头
接受:text/html、application/xhtml+xml、application/xml;q=0.9、image/webp、image/apng,/;q=0.8
接受编码:gzip,deflate
接受语言:nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7,de;q=0.6
缓存控制:无缓存
连接:保持活动
Cookie:_ga=GA1.2.1536444328.1523437334;lang=nl-NL;i_like_gogits=9a86afa5ec7597c8;_csrf=P9KjWDXD-yzc5aRkXRto54cExJ46MTUzNDc1NjUwOTYyODU1NjQzMQ%3D%3D; redirect_to=%252Ffavicon.ico
主机:subdomain.example.com
Pragma:no-cache
Upgrade-Insecure-Requests:1
用户代理:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/68.0.3440.106 Safari/537.36
我的 IIS 7.5 配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://192.168.0.37/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我的 nginx 配置。我尝试了在 stack overflow 的答案中找到的几个设置,但 IIS 一直将其重写为http://subdomain.example.com没有 https 而不是所需的https://subdomain.example.com:8443
server {
listen 443 ssl;
listen [::]:443 ssl;
listen 8443 ssl;
listen [::]:8443 ssl;
server_name subdomain.example.com;
ssl_certificate /etc/letsencrypt/live/subdomain.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/subdomain.example.com/privkey.pem; # managed by Certbot
proxy_set_header X-Forwarded-Proto $scheme;
location /.well-known {
proxy_set_header X-Forwarded-Proto $scheme;
alias /var/www/repo.exit-reizen.nl/.well-known;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:6000;
}
client_max_body_size 50M;
}
server {
listen 80;
listen [::]:80;
listen 8080;
listen [::]:8080;
port_in_redirect on;
server_name subdomain.example.com;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
location /.well-known {
proxy_set_header X-Forwarded-Proto $scheme;
alias /var/www/subdomain.example.com/.well-known;
}
return 302 https://subdomain.example.com:8443$request_uri;
}
有没有办法设置 IIS 来接受所有重定向参数,因为 nginx 会推送它们,而无需将它们重写为它认为好的参数?
答案1
我通过使用传统的重定向规则并排除 certbot 的 .well-known 解决了我当前的问题。
这样,任何不在的内容都.well-known
将被重定向到 https,这是可行的,但是如果 IIS 能够毫无疑问或修改 nginx 返回的内容,那就更好了。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" patternSyntax="Wildcard" stopProcessing="true">
<match url=".well-known*" />
<action type="Rewrite" url="http://192.168.0.37/{R:0}" />
</rule>
<rule name="redirect to https" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions logicalGrouping="MatchAny">
<add input="{URL}" negate="true" pattern="*.well-known*" />
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}:8443{REQUEST_URI}" redirectType="Found" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>