nginx 端口重定向未显示

nginx 端口重定向未显示

我有以下配置。我正在尝试将 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>

相关内容