前言
在前一篇文章中,我们讨论了单域名SNI验证的配置方法(传送门),那么,这篇文章我们就来讨论下多域名如何配置sni验证 :cool:
注意事项
开启此功能后,如果你有使用CDN加速的必要,
必须开启CDN的SNI回源!
必须开启CDN的SNI回源!
必须开启CDN的SNI回源!
否则可能会导致各种5xx错误!
如上图,输入你配置的域名即可
安装准备
为了简洁,本篇文章就不放安装方法出来了,详细的安装方法请参见单域名配置文章 :arrow:
配置文件
因为这次讲的是多域名,配置文件相对于单域名有较大改变,并且要启用vhost,所以出错率有可能会比较高,所以各位跟紧步伐辣! :oops:
备注:我的Nginx配置文件目录:/usr/local/nginx/conf(目录位置因机器而异,请查好自己的nginx目录位置!) :neutral:
第一步,也是先进入配置文件夹
cd /usr/local/nginx/conf ls #查看一下有没有vhost文件夹? sudo mkdir vhost #如果没有则创建 sudo vim nginx.conf
在nginx.conf最后一个括号前加上:
include vhost/*.conf; #如果是从单域名过来的同学,则需要在http里面添加,下图是例子: http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 50m; sendfile on; sendfile_max_chunk 512k; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; #limit_req_zone $binary_remote_addr zone=allips:20m rate=20r/s fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_http_version 1.1; gzip_comp_level 4; gzip_types text/plain text/css application/json image/png image/x-icon application/javascript application/x-javascript text/javascript text/xml application/xml application/xml+rss text/cache-manifest application/octet-stream; gzip_vary on; #limit_conn_zone $binary_remote_addr zone=perip:10m; ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section. server_tokens off; access_log off; include vhost/*.conf;#在这里加,上面不用管,这只是个例子 } #############################################################3 #最后:wq保存并退出
进入vhost文件夹
cd vhost
新建vhost配置文件:
sudo vim cannon.org.cn.conf #将cannon.org.cn改为你的主域名
配置如下:
server { listen 80; listen [::]:80 ipv6only=on; server_name cannon.org.cn;#把cannon.org.cn改为你的主域名 return 444 include enable-php.conf; } server { listen 444 ssl; listen [::]:444 ipv6only=on; server_name cannon.org.cn;#把cannon.org.cn改为你的主域名 ssl on; ssl_certificate /usr/local/nginx/conf/ssl/cannon.org.cn_ssl.crt; #同下 ssl_certificate_key /usr/local/nginx/conf/ssl/cannon.org.cn_ssl.key; #改为你自己的SSL证书 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; root /home/wwwroot/default; index index.php index.html index.htm; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; } include enable-php.conf; location /nginx_status { stub_status on; access_log off; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /.well-known { allow all; } location ~ /\. { deny all; } access_log /home/wwwlogs/access.log; }
输入:wq,退出并保存,并执行sudo nginx -t看看有木有报错 :grin:
这样子,第一个域名就配置好啦,然后我们开始配置第二个域名(可选)
新建第二个配置文件:
sudo vim blog.cannon.org.cn.conf #将blog.cannon.org.cn.conf改为你想添加的第二个域名
第二个域名配置如下:
server { #listen 80; #listen [::]:80 ipv6only=on; #第二个域名不能继续监听80,否则会报错(好迷) server_name blog.cannon.org.cn; #将blog.cannon.org.cn改为你要添加的第二个域名 return 444; include enable-php.conf; } server { listen 444; #listen [::]:444 ipv6only=on;第二个域名也不能监听v6 server_name blog.cannon.org.cn; #将blog.cannon.org.cn改为你要添加的第二个域名 #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; } include enable-php.conf; ssl_certificate /usr/local/nginx/conf/ssl/blog.cannon.org.cn.pem; #改为你自己的SSL证书 ssl_certificate_key /usr/local/nginx/conf/ssl/blog.cannon.org.cn.key; #改为你自己的SSL证书 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; root /home/wwwroot/default; index index.php index.html index.htm; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; } include enable-php.conf; location /nginx_status { stub_status on; access_log off; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /.well-known { allow all; } location ~ /\. { deny all; } access_log /home/wwwlogs/access.log; }
输入:wq,退出并保存
返回conf文件夹:
cd ..
修改nginx.conf文件
sudo vim nginx.conf
(单域名过来的童鞋可以跳过) 在nginx.conf最后一个括号后面添加 :mrgreen: :
stream { map $ssl_preread_server_name $name { #根据ssl sni name选择策略 backend.example.com web; #把backend.example.com 改成你的域名 default block; #只要sni name 不正确就断开连接 } upstream web { server 127.0.0.1:444; #正常的Web服务 } upstream block { server 127.0.0.1:80; #用于阻止不合法请求 } server { listen 443 reuseport; listen [::]:443 reuseport; proxy_pass $name; ssl_preread on; #开启ssl_preread } }
接下来就到了最关键的一步啦,不要退出,修改stream{}:
stream { map $ssl_preread_server_name $name { #根据ssl sni name选择策略 #比如我想对cannon.org.cn开启sni验证,则: cannon.org.cn web; #我还想对blog.cannon.org.cn开启sni验证: blog.cannon.org.cn web; #以此类推,其他域名的添加方法也是如此 #格式:域名+(空格)web;(别忘记加;) default block; #只要sni name 不正确就断开连接 } #下面不需要动 upstream web { server 127.0.0.1:444; #正常的Web服务 } upstream block { server 127.0.0.1:80; #用于阻止不合法请求 } server { listen 443 reuseport; listen [::]:443 reuseport; proxy_pass $name; ssl_preread on; #开启ssl_preread } }
然后输入:wq,退出并保存,运行nginx -t进行查错
如没有错误,则可以输入systemctl restart nginx重启啦 :wink:
出现错误的,可以在评论区发上来,我可以帮你康康
:idea: :razz:
Comments | NOTHING