Nginx HTPP/HTTPS 使用相同的非标准端口
本文最后更新于 2024-07-06,文章内容可能已经过时。
有的时候因为众所周知的原因,无法使用常规端口来完成项目建设。
当使用非标准端口来完成建站的时候,通常无法像默认端口一样完成无感的 HTTP -> HTTPS
的跳转,通常可能是进行使用两个非标准端口进行跳转,例如: http://127.0.0.1:8888 -> https://127.0.0.1:8899
,其实也可以通过 Nginx
自带的功能完成 HTTP/HTTPS
在用户侧体现成一个端口,达到无感跳转。
这种做法可能在对付某些特定情况下的项目升级迭代流程也会起到作用。
- 先添加一个
stream
模块,可以直接在nginx.conf
总配置文件中添加就好了。
stream {
# 定义一个upstream,这里是HTTP协议的
upstream web {
server 127.0.0.1:80;
}
# 定义一个upstream,这里是HTTPS协议的
upstream https {
server 127.0.0.1:443;
}
# 定义一个映射关系,根据ssl/tls信息走到不同的upstream
map $ssl_preread_protocol $upstream {
"" web;
default https;
}
# 监听一下8888端口,这个就是我们暴露出去的非标准端口,根据上面定义的映射信息代理流量
server {
listen 8888;
proxy_pass $upstream;
ssl_preread on;
}
}
- 一个示例的Nginx站点配置,可以看到就是常规的标准端口的配置文件。
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
charset utf-8,gbk;
server_name home.zhx47.top;
ssl_certificate /root/.acme.sh/zhx47.top_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/zhx47.top_ecc/zhx47.top.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_buffer_size 1400;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling_verify on;
ssl_prefer_server_ciphers on;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
add_header Strict-Transport-Security max-age=15768000;
if ($ssl_protocol = "") { return 301 https://$http_host$request_uri; }
location / {
proxy_pass http://127.0.0.1:40000;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection $connection_upgrade;
proxy_set_header SERVER_PORT $server_port;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Real-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
到这里,我们直接访问 8888
端口,就可以完成用户侧无感的 HTTP -> HTTPS
跳转,同时如果后续备案成功后,也可以直接通过 80/443
常规端口进行访问。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 舟涯
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果