nginx配置在一个端口下,同时支持http与https两种协议

打印 上一主题 下一主题

主题 949|帖子 949|积分 2847

Nginx 不支持同一个端口 同时提供 HTTP 和 HTTPS 服务,缘故原由如下:

  • HTTPHTTPS 利用的是差别的协议,HTTPS 需要 TLS 握手,而 HTTP 不需要。
  • Nginx 无法在同一个端口上自动区分 HTTP 和 HTTPS
解决方案

虽然 Nginx 自己不支持 HTTP 和 HTTPS 共享同一端口,但你可以利用 SSL 预读(SSL Preread) 技能,通过 Nginx 的 stream 模块在 同一端口 上区分 HTTP 和 HTTPS 流量。
配置方式:利用 stream 模块监听 443 端口并区分 HTTP/HTTPS
  1. # 在 http 之外的全局配置中
  2. stream {
  3.     map $ssl_preread_protocol $name {
  4.         "" http_backend;  # 没有 TLS 的是 HTTP
  5.         default https_backend;  # 有 TLS 的是 HTTPS
  6.     }
  7.     upstream http_backend {
  8.         server 127.0.0.1:8080;  # HTTP 服务器
  9.     }
  10.     upstream https_backend {
  11.         server 127.0.0.1:8443;  # HTTPS 服务器
  12.     }
  13.     server {
  14.         listen 443;
  15.         proxy_pass $name;
  16.         ssl_preread on;
  17.     }
  18. }
  19. http {
  20.     server {
  21.         listen 8080;
  22.         server_name yourdomain.com;
  23.         
  24.         location / {
  25.             root /usr/share/nginx/html;
  26.             index index.html;
  27.         }
  28.     }
  29.     server {
  30.         listen 8443 ssl;
  31.         server_name yourdomain.com;
  32.         ssl_certificate /path/to/cert.pem;
  33.         ssl_certificate_key /path/to/key.pem;
  34.         location / {
  35.             root /usr/share/nginx/html;
  36.             index index.html;
  37.         }
  38.     }
  39. }
复制代码
工作原理


  • stream 监听 443 端口

    • 利用 ssl_preread 读取数据流,判断是否是 HTTPS(即是否有 TLS 握手)。
    • 假如是 HTTP,转发到 http_backend(127.0.0.1:8080)。
    • 假如是 HTTPS,转发到 https_backend(127.0.0.1:8443)。

  • http {} 配置 HTTP 和 HTTPS

    • server 监听 8080 端口处理 HTTP。
    • server 监听 8443 端口处理 HTTPS。

最终结果


  • 访问 http://yourdomain.com:443:会自动转发到 8080 端口的 HTTP 服务器。
  • 访问 https://yourdomain.com:443:会自动转发到 8443 端口的 HTTPS 服务器。

这样,你就能在 一个端口(443) 上同时支持 HTTP 和 HTTPS 访问!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表