nginx配置httpsjavascript
HTTPS,超文本傳輸安全協議,是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。如下將介紹如何設置https。css
1、配置文件設置
html
這裏我使用的是虛擬主機設置httpsjava
nginx.conf文件,在http中加入nginx
include /usr/local/nginx/vhost/*.conf;算法
mkdir /usr/local/nginx/vhostjson
vim /usr/local/nginx/default.confvim
server { listen 80; server_name _; #這裏的rewrite,訪問80端口強制跳轉到https rewrite ^ https://$host$request_uri? permanent; } server { # listen 443; 1.15版本後 ssl on; 這條被廢棄了,開啓443方式以下 listen 443 ssl; server_name localhost; #瀏覽器直接重定向到https,避免中途的302重定向URL被篡改。進一步提升通訊的安全性。 HSTS max-age=31536000是指接下來一年 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; #證書存放位置 ssl_certificate /opt/system/nginx/ssl/server.crt; #免密key存放位置 ssl_certificate_key /opt/system/nginx/ssl/server.key #依賴SSLv3和TLSv1協議的服務器密碼將優先於客戶端密碼 ssl_prefer_server_ciphers On; #指定密碼爲openssl支持的格式 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #密碼加密方式 ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS; location / { #主配置文件中有upstream模塊,代理後臺的兩個tomcat。 proxy_pass http://backend; gzip on; gzip_min_length 40000; gzip_types application/javascript application/json text/css text/plain; client_max_body_size 5000M; proxy_connect_timeout 60; proxy_send_timeout 1000; proxy_read_timeout 200; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header SERVER_ADDR $server_addr; proxy_set_header SERVER_PORT $server_port; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header REMOTE_PORT $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; error_page 500 501 502 503 504 404 400 /error.html; location = /error.html { root /usr/local/nginx/html/; } }
2、建立ca證書瀏覽器
一、生成服務器私鑰:tomcat
openssl genrsa -des3 -out server.key 1024
#des3是算法, -out [filename] 1024是長度,默認 會讓你輸入密碼,不小於4個字符
二、建立簽名請求的證書(CSR):
openssl req -new -key server.key -out server.csr
-new 建立一個新的證書請求文件 -key filename 指定私鑰的輸入文件,建立證書請求時須要 -out filename.csr 輸出指定的文件名
三、在加載SSL支持的Nginx並使用上述私鑰時除去必須的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
四、最後標記證書使用上述私鑰和CSR
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
五、最後會有4個文件,有用的是server.crt和server.key,放到配置文件中指定的位置便可
server.crt server.csr server.key server.key.org
最後啓動nginx,訪問http://ip/ 會強制跳轉https,這裏我是代理的兩個tomcat節點,因此配置文件中使用的是proxy_pass
擴展:nginx中內置變量
$args 請求中的參數,如www.abc.com/test/hello?a=1&b=2的$args就是a=1&b=2
$document_root Nginx虛擬主機配置文件中的root參數對應的值
$document_uri 當前請求中不包含指令的URI,如www.test.com/test/ok?a=1&b=2的document_uri就是/test/hello,不包含後面的參數
$host 主機頭,也就是域名
$http_user_agent 客戶端的詳細信息,也就是瀏覽器的標識,用curl -A能夠指定
$http_cookie 客戶端的cookie信息
$limit_rate 若是Nginx服務器使用limit_rate配置了顯示網絡速率,則會顯示,若是沒有設置,則顯示0
$remote_addr 客戶端的公網IP
$remote_port 客戶端的端口
$request_method 請求資源的方式,GET/PUT/DELETE等
$request_filename 當前請求的資源文件的路徑名稱,至關因而$document_root/$document_uri的組合
$request_uri 請求的連接,包括$document_uri和$args
$scheme 請求的協議,如ftp、http、https
$server_protocol 客戶端請求資源使用的協議的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr 服務器IP地址
$server_name 服務器的主機名
$server_port 服務器的端口號
$uri 和$document_uri相同
$http_referer 客戶端請求時的referer,通俗講就是該請求是經過哪一個連接跳過來的