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服務工作正常。