1.默認狀況下ssl模塊並未被安裝,須要在編譯nginx的時候指定–with-http_ssl_module參數。
[root@zabbix vhosts]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.6.3
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_modulephp
生成證書流程:html
能夠經過如下步驟生成一個簡單的證書:
首先,進入你想建立證書和私鑰的目錄,例如:前端
cd /usr/local/nginx/conf
建立服務器私鑰,命令會讓你輸入一個口令:nginx
openssl genrsa -des3 -out server.key 1024
建立簽名請求的證書(CSR):服務器
openssl req -new -key server.key -out server.csr
在加載SSL支持的Nginx並使用上述私鑰時除去必須的口令:測試
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt網站
配置nginx(我這裏是測試機,域名隨便)能夠達到https和http共存的需求。
http://zabbix.com
https://zabbix.comui
server {
listen 80;
listen 443 ssl; # ssl寫在443端口後面, 這樣http和https的連接均可以用
server_name zabbix.com;url
root /usr/local/nginx/html/zabbix;
index index.php index.html index.htm;spa
# ssl on; #把ssl on;這行註釋掉
ssl_certificate /usr/local/nginx/conf/vhosts/server.crt;
ssl_certificate_key /usr/local/nginx/conf/vhosts/server.key;
....................................................
}
關鍵在於
上面的listen 80;
listen 443 ssl; 開啓80端口
固然,這樣玩就沒有啥意義了,既然是https,就徹底不必http傳輸數據啦.咱們必須把全部http請求轉發到https,
把http重定向到https使用了nginx的重定向命令。也可使用location中的 proxy_pass http://192.168.0.162:443;
也就是再添加一個虛擬主機,以前網站使用默認80端口
server {
listen 80;
server_name zabbix.com;
rewrite ^/(.*)$ https://zabbix.com/$1 permanent; ####請求zabbix.com:80端口的時候重定向到https://zabbix.com
root /usr/local/nginx/html/zabbix;
index dashboard.php index.php index.html index.htm; ###須要首頁鎖定的好比dashboard.php可寫到index.php中
.....
......
} ####默認使用虛擬主機。
而後添加一個443端口的虛擬主機。
server {
listen 443;
server_name zabbix.com;
root /usr/local/nginx/html/zabbix;
index dashboard.php index.php index.html index.htm;
ssl on;
ssl_certificate vhosts/server.crt; ###須要開啓ssl,設置證書的路徑。
ssl_certificate_key vhosts/server.key;
........
...........
}
另一種方式:使用外部反向代理到本機的80端口,意思是前端點擊以後跳轉到https的url,而後反向代理到本機的80端口,這樣也能夠實現https訪問。實現以下:
upstream tw_league {
server 127.0.0.1:80;
}
server {
listen 443;
server_name league.myth.game168.com.tw;
ssl on;
ssl_certificate vhosts/key/myth.game168.com.tw.crt; ###須要開啓ssl,設置證書的路徑。
ssl_certificate_key vhosts/key/myth.game168.com.tw.key; ####經過前端的https://xxx:443端口跳轉到本機以後,交給upstream模塊跳轉到本機的80端口,實現https。
charset utf-8;
access_log logs/ssl-tw.sh.9wee.com_access.log main;
#access_log off;
location / {
proxy_pass http://tw_league;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;
proxy_buffer_size 8k;
proxy_buffers 8 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
}
}