配置 nginx 以允许自定义端口上的 HTTPS 流量
Posted
技术标签:
【中文标题】配置 nginx 以允许自定义端口上的 HTTPS 流量【英文标题】:Configuring nginx to allow HTTPS traffic on a custom port 【发布时间】:2016-04-11 07:05:37 【问题描述】:我对配置 nginx 以将在自定义端口上接收到的 HTTPS 流量转发到与目标 url 相同的自定义端口号有疑问。我的情况如下。
-
我在 AWS 中有一个 VPC。我在接收 HTTPS 流量的 NAT(在我的例子中是堡垒服务器)实例上运行 nginx。
我在 VPC 中的应用实例是 nginx 转发的请求的目的地。它有两个自定义子域,一个用于单向 SSL 身份验证,另一个用于双向 SSL 身份验证。
我在自定义端口而不是 443 上提供具有双向身份验证的 URI。在端口 443 上运行服务的 URI 使用单向 SSL 身份验证(服务器身份验证)。
在我的 nginx 配置文件中,我侦听此自定义端口,以便在 SSL 握手完成后将 HTTPS 请求重定向到应用程序实例上的相同自定义端口。但我观察到在握手阶段之后,默认情况下它被重定向到应用程序实例的端口 443。
在设置 HTTPS 方案后,正在使用 Java/Groovy 中可用的 HTTPBuilder 对象发送 HTTPS 数据包。
这里给出了我正在使用的示例 nginx 配置:
server
listen 8000;
server_name myserver.com;
ssl on;
ssl_certificate /path/to/server/cert;
ssl_certificate_key /path/to/server/key;
ssl_client_certificate /path/to/client/cert;
ssl_verify_client on;
#https requests to this URI gets redirected to port 443 by default
location /customUri1
# switch off logging
access_log off;
proxy_pass http://app-instance-ip:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
server
listen 443;
server_name myserver.com;
ssl on;
ssl_certificate /path/to/server/cert;
ssl_certificate_key /path/to/server/key;
location /customUri2
# switch off logging
access_log off;
proxy_pass http://app-instance-ip:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
是否有任何 nginx 配置机制可以让我将 HTTPS 请求发送到应用实例上的自定义端口?谢谢。
【问题讨论】:
【参考方案1】:我发现了问题。这是我将 HTTPS 数据包发布到服务器的方式。在我的 Groovy 代码中,HTTPBuilder 的 uri.port 字段设置为 443 而不是 8000。将其替换为 8000 后,我的客户端就可以发布到服务器了。
【讨论】:
您是如何设法将客户端证书与您的 groovy 代码一起使用的?以上是关于配置 nginx 以允许自定义端口上的 HTTPS 流量的主要内容,如果未能解决你的问题,请参考以下文章