Nginx同一端口同时监听http和https

nginx版本

1.22.1

依赖模块

stream、stream_ssl、stream_ssl_preread

配置代码

# 如:8080端口根据http和https分别转向不同的服务:https跳转至127.0.0.1:8081,http跳转至127.0.0.1:8082,在nginx配置文件中添加如下代码即可:
# 注意,以下代码位置 和 http 配置平级
# begin 
stream {
    upstream web_https {
        # 可根据实际情况调整
        server 127.0.0.1:8081;
    }
    upstream web_http {
        # 可根据实际情况调整
        server 127.0.0.1:8082;
    }

# 关于 ssl_preread_protocol 相关说明请参考:https://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html
    map $ssl_preread_protocol  $upstream {
        "" web_http;
        # ssl_preread_protocol的值与https中 ssl_protocols 有关
        "TLSv1.1" web_https;
        "TLSv1.2" web_https;
        "TLSv1.3" web_https;
        default web_https;
     }
    # http and https on the same port
    server {
        listen 8080;
        proxy_pass $upstream;
        ssl_preread on;
    }
}
# end

# 若在同一台服务器,可添加如下代码进行测试
# https 
server
{
    # https
     listen 8081  ssl http2;
    server_name 127.0.0.1;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    # ssl配置 begin
    # 略...
    # ssl配置 end
     location / {
         default_type application/json;
          return 200 '{"msg":"this is [https] page"}';
    }

}
# http
server
{
    # http
     listen 8082;
    server_name 127.0.0.1;

    location / {
        default_type application/json;
          return 200 '{"msg":"this is [http] page"}';
    }
 }

 # 配置完毕后重启服务即可。

重启服务

service nginx restart;

测试

# http访问
http://127.0.0.1:8080
# 结果:'{"msg":"this is [http] page"}'
# https访问
https://127.0.0.1:8080
# 结果:'{"msg":"this is [https] page"}'

其他问题

若测试http连接时自动跳转至https,控制台提示307

方案1

在 Chrome 的 URL 字段中输入以下内容:chrome://net-internals/#hsts,然后搜索您的网站并将其删除。

方案2

您可能是在顶级域中设置的 HSTS 并包含了子域,因此可以从其中删除子域。(原文:You may also set this at a top level domain and include subdomains so you may need to delete from there.)(对于此处的「顶级域」我的理解是指一级域名 / 主域名,原文想描述的情况是 Strict-Transport-Security 字段中设置了子域的情况,语法为 Strict-Transport-Security: max-age=<expire-time>; includeSubDomains。这样当子域不再需要 HTTPS 时,可以对父域的 Header 进行更新以丢弃 includeSubDomains。)

方案3

更改服务器配置中的 Header Strict-Transport-Security 字段:先发布 max-age 为 0 的 Header,然后重新访问网站以清除此 Header,最后停止发布此 Header。这对于其他不太容易清除 Header 的浏览器很有帮助。

参考:HTTPS -> HTTP 引起的 307 状态码与 HSTS

参考连接

Nginx配置说明

Nginx https 协议配置 ssl_protocols 的相关问题_

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇