Nginx+SSL配置Https服務器 nginx
1.何爲SSL:redis
SSL證書是數字證書的一種,相似於駕駛證、護照和營業執照的電子副本。SSL證書通 過在客戶端瀏覽器和Web服務器之間創建一條SSL安全通瀏覽器
道(Secure socket layer(SSL)安全協 議是由Netscape Communication公司設計開發。該安全協議主要用來提供對用戶和服務器的認 證;對安全
傳送的數據進行加密和隱藏;確保數據在傳送中不被改變,即數據的完整性,現已成爲 該領域中全球化的標準。因爲SSL技術已創建到全部主要服務器
的瀏覽器和WEB服務器程序中,所以 ,僅需安裝服務器證書就能夠激活該功能了)。即經過它能夠激活SSL協議,實現數據信息在 客戶端和服務session
器之間的加密傳輸,能夠防止數據信息的泄露。保證了雙方傳遞信息的安全性, 並且用戶能夠經過服務器證書驗證他所訪問的網站是不是真實socket
可靠。編輯器
2.生成SSL證書:ide
使用openssl工具來生成一個SSL證書, 因爲是測試, 因此證書就不設密碼了, 若是須要線 上使用的話, 須要向相關機構進行申請購買, 申請工具
證書的具體要求也因頒發商不一樣而不一樣, 看操
做吧.
首先生成個key文件:
# openssl genrsa -des3 -out ssl.key 1024
<- 1024並非固定的, 會因爲要求不一樣而不一樣
<- ssl.key 是生成的key文件, 以後會用到, 必定保存好
<- 若是須要加密的話, 加參數就能夠了, 具體加密方式不列舉, 請找man
<- 若是使用加密的話, 會要求輸入密碼( 這個密碼必定要保存好, 往後重啓nginx都須要 )
使用key文件, 生成一個csr文件:
# openssl req -new -key ssl.key -out ssl.csr
<- 測試能夠一路回車, 若是是正式環境的話, 須要填寫之中信息 <- 正式環境的話, 根據需求來填寫詳細信息
使用csr文件, key文件來頒發證書:
# openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt 此時會在當前目錄下生成一個ssl.crt的文件, 這個文件日
後要加到nginx配置文件裏
配置Nginx: Nginx開啓SSL模塊:
Nginx配置Https主機, 必需要開啓SSL模塊, 若是沒有開啓的話, 須要從新編譯Nginx 使用以下命令, 檢查Nginx編譯時是否加入了SSL模塊的
支持
# ./sbin/nginx -V "查看Nginx版本及編譯參數等信息"
nginx version: Apache/2.2.21
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx-1.4.3 --with-http_stub_status_module
--with-http_ssl_module --add-module=nginx-devel-kit --add-module=lua-nginx-module --add-module=echo-nginx-module --add-
module=memc-nginx-module-master --add-module=redis2-nginx-module --add-module=set-misc-nginx-module-master --add-
module=nginx_upstream_check_module
能夠看到--with-http_ssl_module, Nginx是開啓了Nginx模塊支持的, 若是查看Nginx編譯參數時候, 沒 有找到 」--with-http_ssl_module
「 參數, 那麼就要從新編譯Nginx了, 加上此參數便可
編輯Nginx配置文件:
使用你習慣的編輯器來編輯nginx的配置文件, 在server塊添加如下幾行:
1 listen 443;
2 ssl on;
3 ssl_protocols SSLv2 SSLv3 TLSv1;
4 ssl_ciphers HIGH:!aNULL:!MD5;
5 ssl_prefer_server_ciphers on;
6 ssl_session_timeout 10m;
7 ssl_certificate /usr/local/nginx-1.4.3/conf/new_ssl/pay.xywy.com.crt;
8 ssl_certificate_key /usr/local/nginx-1.4.3/conf/new_ssl/SSL.KEY;
說明:
第1行: 使Nginx監聽443端口
第2行: 開啓SSL模塊
第3行: 配置SSL支持的協議
第4行: 配置SSL加密方式
第5行: 配置依賴SSLv3和TLSv1協議的服務器密碼將優先於客戶端密碼
第6行: 配置SSL會話超時時間
第7行: 配置SSL證書, 使用key文件, csr文件簽發的證書
第8行: 配置SSL祕鑰, 咱們上一步生成的key文件
若是須要將全部http請求跳轉到https的話,還須要在80端口的配置文件中添加如下一行
rewrite ^ https://pay.xywy.com$request_uri? permanent;
編輯好配置文件後, 重啓Nginx.
ps: 重啓Nginx最好stop再start, 不然可能會致使證書不生效, 重啓時若是以前創建key文 件時, 使用了加密認證, 那麼此時輸入建立key文
件時, 輸入的密碼就能夠了
配置時可能會出現的問題及解決方法:
E: 證書不生效
A1: 可能因爲Nginx重啓的時候使用的是reload, 而不是stop再start
A2: 可能因爲配置裏面, 一個server同時監聽80和443兩個端口, 若是說要同時支持http和
https的話, 將兩個listen端口寫在兩個server裏面.