Nginx使用stream分流SNI与共存443端口
1、在Nginx配置文件中插入以下代码
# 示例代码
# stream模块设置
stream {
# SNI识别,将域名映射成对应的配置名称
map $ssl_preread_server_name $cust_name {
blog.wwqq.site blog.wwqq.site; # 域名修改为自己的
wwqq.site wwqq.site;
}
upstream blog.wwqq.site {
server unix:/dev/shm/blog.wwqq.site.sock; # 这里使用socket路径,也可以使用TCP/IP形式
} # 如server http://127.0.0.1:8443;
upstream wwqq.site {
server unix:/dev/shm/wwqq.site.sock;
}
# stream模块监听443端口位置
server {
listen 443 reuseport; # 可选reuseport参数 端口复用,理论上可以提高连接性能
listen [::]:443 reuseport;
ssl_preread on;
proxy_protocol on; # 开启proxy_protocol
proxy_pass $cust_name;
}
}
2、在blog.wwqq.site网站配置文件中插入以下代码
# 示例代码
# 去掉原先配置文件以下部分
server {
listen 80;
listen 443;
...
# 加入以下部分
# 设置 HTTP 服务器,将所有 HTTP 请求都重定向到 HTTPS
server {
listen 80 ;
listen [::]:80 ;
server_name blog.wwqq.site;
# 重定向所有 HTTP 请求到 HTTPS
if ($scheme = http) {
return 301 https://$host$request_uri;
}
}
server {
listen unix:/dev/shm/blog.wwqq.site.sock ssl http2 proxy_protocol;
set_real_ip_from unix:; # 从Proxy protocol获取真实IP
# set_real_ip_from 127.0.0.1; # 如上游使用listen 127.0.0.1:8443则使用这一条
real_ip_header proxy_protocol;
3、参考资料
1、[nginx][tls] nginx配置https与ssl/tls的sni的方法 - toong - 博客园 (cnblogs.com)
2、探索惊群 ⑥ - nginx - reuseport - 知乎 (zhihu.com)