Nginx监听多个端口,但重写为一个

所以我有一个应用程序运行,由于传统的原因,必须保持它的旧url与尾随端口号码工作。

所以我有一个类似于这样的configuration:

server { listen 443 ssl; listen 8080 ssl; server_name myurl.com; ssl on; ssl_certificate /etc/nginx/conf.d/certfile.pem; ssl_certificate_key /etc/nginx/conf.d/keyfile.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:7990; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Location $host:443; proxy_redirect off; } } 

myurl.com:8080发出的一些AJAX请求会抛出CRSF错误, myurl.com:8080可以正常工作。 我想这样做,当用户连接到8080端口时,nginx将自动重写为443。 这可能吗? 我已经尝试添加各种标题,但没有一个似乎在做伎俩。

还尝试做一个return 301 https://$server_name:443$request_uri; 但是nginx真的不喜欢它。

您可以将服务器块分为两个,每个端口一个。 将通用configuration移动到外部块(如果这些是唯一的服务器块),或者包含带有include指令的通用configuration。

例如:

 ssl_certificate /etc/nginx/conf.d/certfile.pem; ssl_certificate_key /etc/nginx/conf.d/keyfile.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; server { listen 8080 ssl; server_name myurl.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name myurl.com; location / { ... } } 

如果https端口是443return指令不需要端口规范。 如果nginx坚持添加端口8080 ,请尝试port_in_redirect off; 声明。