SSL申请可以从腾讯云免费,在此不冗述
1.添加两个SSL站点使用各自的SSL证书
使用非标SSL端口 如:446,447 添加两个SSL站点,才能分别绑定各自对应的SSL证书,如果都使用443的话,IIS7.5是不支持的。而为了不需在访问时输入https://域名:446 这样的形式,故引入 Ngnix 做反向代理才能实现,
切记!那些所谓的修改“C:/Windows/system32/inetsrv/config/applicationHost.config” 的方法全部都是杜撰的,对于IIS7.5无效!(那些不经验证就乱发方法的作者太无耻!浪费我好几个小时测试最终无效!)
2.Ngnix设置反向代理
其实就是将带域名和端口信息的的URL请求通过Ngnix转发给局域网指定IIS使用非443端口的SSL网站,从而实现一个外网IP挂载多个https网站(外网访问不需要添加非443端口,请求首先由Ngnix截获,后由域名来区分跳转到哪个https网站)
修改 nginx\conf\nginx.conf :见3下面的代码和多机集群一起说了.
参考:https://blog.csdn.net/howsoever/article/details/82346741
3.Ngnix设置多机集群
同上,设置好反向代理后,在web服务器设置那里还可以添加多个局域网IIS服务器地址,带非443端口,由Ngnix通过负载均衡决定url请求转发给那台局域网IIS服务器处理,从而实现多机负载相同的网站,注意各IIS服务器对应的相同网站内容一致。
Ngnix配置如下: nginx\conf\nginx.conf
#user nobody;
#这里设置Ngnix进程数量,根据服务器能力设置
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
#gzip on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6].";
server_names_hash_bucket_size 128;
client_max_body_size 100m;
client_header_buffer_size 256k;
large_client_header_buffers 4 256k;
#SSL网站1,域名1配置
# can't use http https head 此处设置域名1为多机集群,由两台局域网服务器分做负载均衡,注意不能带https://等头,只用IP,注意:域名1和2均为 www.xxx.com 形式.
upstream 域名1 {
server 局域网IIS服务器IP地址1:447;
server 局域网IIS服务器IP地址2:443;
}
server {
#反向代理,两个域名这里设置都用443端口
listen 443 ssl;
server_name 域名1;
ssl on;
#这里设置存放SSL证书的物理地址,Ngnix的是两个文件,证书申请可以在腾讯云免费,方法不再冗述
ssl_certificate "E:/nginx/conf/ssl/域名1/1_域名1_bundle.crt";
ssl_certificate_key "E:/nginx/conf/ssl/域名1/2_域名1.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
location / {
#注意,多机集群的话这里要使用域名1,做反向代理则只能使用局域网IP
proxy_pass https://域名1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
#SSL网站2,域名2配置
server {
#反向代理,两个域名这里设置都用443端口
listen 443 ssl;
#这里就是区分两个域名用的,不带能https://
server_name 域名2;
ssl on;
ssl_certificate "E:/nginx/conf/ssl/域名2/1_域名2_bundle.crt";
ssl_certificate_key "E:/nginx/conf/ssl/域名2/2_域名2.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
location / {
#此处域名2不做多机集群,只做反向代理,故域名2这里使用局域网IP加IIS的非443端口号
proxy_pass https://局域网服务器IP:446/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
#include vhosts.conf;注意原引入的include可能会包含其他服务器设置,不需要的要屏蔽掉
}
参考:https://blog.csdn.net/zhanghan18333611647/article/details/50811980 , https://blog.csdn.net/zunguitiancheng/article/details/52738335
4.用Windows Service Wrapper将Ngnix添加为系统服务自动启动
Ngnix本身不支持以系统服务方式启动,需要利用这个小工具:Windows Service Wrapper ,编写正确的XML配置,用命令行方式将设定好名称的Windows Service Wrapper添加为系统服务,之后,Windows Service Wrapper会以系统服务方式运行,并启动XML文件内设置好的Ngnix,随系统启动。
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx Run at server</description>
<logpath>e:\nginx\</logpath>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<executable>e:\nginx\nginx.exe</executable>
<startarguments>-p e:\nginx</startarguments>
<stopexecutable>e:\nginx\nginx.exe</stopexecutable>
<stoparguments>-p e:\nginx -s stop</stoparguments>
</service>
注意:Windows Service Wrapper要使用 2.1.2版本工作才正确,否则停止服务会报错. 1.9版不行, 2.1.2版下载: https://download.csdn.net/download/jessezappy/10886895
参考:https://www.cnblogs.com/roam/p/5926550.html , https://www.cnblogs.com/edward2013/p/5506588.html
5.测试
我只有一个公网IP,挂载了两个SSL网站,两个注册的域名均指向这一个公网IP,
测试IIS+双SSL网站:手机上输入 , https://域名1 ,https://域名2 ,不需要带非443端口,都能正确访问,说明反向代理工作正常。
测试多机集群:手机上输入,https://域名1 ,将域名1 指向的两台局域网IIS服务器的相同网站首页稍作修改,以便于区分两个网站,打开后,反复刷新页面,会发现首页被修改的内容不同呈现,说明多机集群工作正常。
测试Windows Service Wrapper,重启运行Ngnix的服务器,不做任何操作,手机访问两个SSL网站,都能正常打开,说明Windows Service Wrapper添加的Ngnix服务工作正常。