Nginx配置https

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;

         }

}

相關文章
相關標籤/搜索