Nginx 配置 https相關問題

1、Nginx基礎

1.概念:
Nginx是一款輕量級的Web服務器、反向代理服務器及電子郵件(IMAP/POP3)代理服務器。
  • 正向代理服務器:通常做用在客戶端,位於客戶端和服務器之間,客戶端發送請求到代理,代理將請求發送到服務器,服務器返回的響應也經由代理到客戶端。客戶端必需要進行一些特別的設置才能使用正向代理,正向代理容許客戶端經過它訪問任意網站而且隱藏客戶端自身。
  • 反向代理服務器:做用在服務器端,它在服務器端接收客戶端的請求,而後將請求分發給具體的服務器進行處理,而後再將服務器的相應結果反饋給客戶端。

2、Https基礎

1.概念

Http(超文本傳輸協議)被用於瀏覽器和web 服務器之間傳遞消息,http協議以明文方式發送內容,不提供任何方式的數據加密,所以攻擊者能夠截取傳輸報文獲取信息。
爲了數據傳輸的安全,在http的基礎上加入了ssl協議就成了https協議,ssl依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊加密。javascript

2.SSL——Secure Sockets Layer安全套接層

SSL協議位於TCP/IP協議與各類應用層協議之間,可分爲兩層:
(1)SSL記錄協議(SSL Record Protocol):它創建在可靠的傳輸協議(如TCP)上,爲高層協議提供數據封裝、壓縮、加密等基本功能的支持。
(2)SSL握手協議(SSL Handshake Protocol):它創建在SSL記錄協議上,用於在實際的數據傳輸開始前,通信雙方進行身份驗證、協商加密算法、交換加密密鑰等。css

3、獲取免費證書

1.概念

採用Https的服務器必須從證書頒發機構CA(Certificate Authority)申請一個用於證實服務器用途類型的證書,有收費的也有免費的,也能夠經過OpenSSL本身造一個證書,不過瀏覽器是不信任你本身造的證書的,在訪問時,會提醒」您的鏈接不是私密鏈接「,在這咱們使用的是Let's Encrypt免費證書。html

2.獲取步驟

(1) 安裝Let's Encrypt推薦獲取證書的客戶端 Certbot
sudo apt-get install certbot
(2)獲取證書(兩種模式)java

  • --webroot模式
    certbot certonly --webroot /var/www/example -d example.com -d www.example.com

這個命令會爲 example.com 和 www.example.com 這兩個域名生成一個證書,會在 /var/www/example 中建立 .well-known 文件夾,這個文件夾裏面包含了一些驗證文件,certbot 會經過訪問 example.com/.well-known/acme-challenge 來驗證你的域名是否綁定的這個服務器。nginx

  • --standalone模式
    certbot certonly --standalone -d example.com -d www.example.com

這種模式不須要指定網站根目錄,他會自動啓用服務器的443端口來驗證域名的歸屬,因此若是有其餘服務(如nginx)佔用了443端口sudo lsof -n -P|grep:443,須要先中止這些服務,在證書生成完畢後,再啓用。web

  • 證書生成完畢後,能夠在/etc/letsencrypt/live/example.com中找到

4、Nginx配置

server {
    listen 443;
    server_name example.com www.example.com;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;   
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    location / {
                 proxy_pass              http://localhost:port/;
                 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;
                 proxy_read_timeout      600;
                 gzip on;
                 gzip_disable "MSIE [1-6]\.(?!.*SV1)";
                 client_max_body_size 10M;
                 gzip_vary on;
                 gzip_proxied any;
                 gzip_comp_level 6;
                 gzip_buffers 16 8k;
                 gzip_http_version 1.1;

                 gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

    }
    
}
server{   //當用http://...訪問時重定向至https://...
    listen 80;   
    server_name  example.com www.example.com;
    return  301 https://www.example.com;
}

重啓Nginx服務,便可使用https://www.example.com訪問該網站算法

5、其餘

1.自動更新證書

let's Encrypt證書只有90天的有效期,因此在證書到期以前,咱們須要從新獲取這些證書,可使用certbot renew這個命令。(若是生成證書時使用--standalone模式,更新證書時也要暫停當前443端口運行的程序)json

2.Nginx詳細配置項解析

詳見:Nginx配置文件(nginx.conf)配置詳解瀏覽器

3.Nginx錯誤處理

先用sudo nginx -t檢測下配置文件,再看下錯誤日誌,以後Google。
詳見:Nginx常見錯誤與解決辦法安全

5.相關命令
  • 開啓Nginx服務 sudo nginx -c /path/to/nginx.conf
  • 重啓Nginx sudo nginx -s reload
  • 檢測nignx配置 sudo nginx -t
  • 暫停nginx服務

    • ps -ef|grep nginx 查看nginx佔用的進程
    • sudo kill -QUIT 28478 (28478爲nginx的主進程號)
相關文章
相關標籤/搜索