介紹
Nginx是一個開放源代碼的高性能HTTP和反向代理服務器,爲Internet上一些最大的站點提供支持。
Nginx可以用作獨立的Web服務器,也可以用作 Apache 和其他Web服務器的反向代理。
與Apache相比,Nginx可以處理大量併發連接,並且每個連接的內存佔用量較小。
安裝
首先更新apt軟件包列表:
sudo apt update
安裝Nginx:
sudo apt install nginx
Nginx服務將在安裝過程完成後自動啓動。您可以通過運行以下 curl 命令進行驗證:
curl -I 127.0.0.1
使用systemctl管理Nginx服務
您可以使用systemctl命令來管理Nginx服務,與其他任何systemd單元相同。這裏我們只列舉我們常用的命令。
要停止Nginx服務,請運行:
sudo systemctl stop nginx
要啓動,請鍵入:
sudo systemctl start nginx
重新啓動Nginx服務:
sudo systemctl restart nginx
進行一些配置更改後,重新加載Nginx服務:
sudo systemctl reload nginx
Nginx配置文件的結構和最佳做法
- Nginx配置文件存儲在
/etc/nginx
目錄中。 - 主要Nginx配置文件爲
/etc/nginx/nginx.conf
。 - 服務器塊(vhost)配置文件存儲在
/etc/nginx/sites-available
目錄。除非將這些文件鏈接到/etc/nginx/sites-enabled目錄,否則Nginx不會使用該目錄中的配置文件。 - 通過從服務器目錄創建 symlink (指針)來激活服務器塊。配置文件站點從
sites-available
目錄移至sites-enabled
目錄,例:ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/www.example.com
。 - 要編寫更具可維護性的代碼,遵循標準命名約定是一個好主意。例如,如果您的域名是
www.example.com
,則配置文件應命名爲/etc/nginx/sites-available/www.example.com.conf
。 /etc/nginx/snippets
錄包含可包含在服務器阻止文件中的配置摘要。如果使用可重複的配置段,則可以將這些段重構爲片段,並將片段文件包括到服務器塊中。- Nginx日誌文件(
access.log
和error.log
)位於var/log/nginx/
錄中。建議每個服務器塊使用不同的access
和error
日誌文件。 - 您可以將域文檔根目錄設置爲所需的任何位置。 Webroot的最常見位置包括:
- /home/<user_name>/<site_name>
- /var/www/<site_name>
- /var/www/html/<site_name>
- /opt/<site_name>
https 實例配置
mozilla開源了一個非常好用的工具: https://ssl-config.mozilla.org ,點一點就可以自動生成推薦的SSL配置。 有個不錯的網站可以用來檢測服務器證書配置情況,https://www.ssllabs.com/ssltest/analyze.html 。
- 生成 dhparam.pem 文件, 在命令行執行方法:
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
- 在/etc/nginx/ssl 目錄中新建爲名www.example.com 的目錄,並放入ssl證書,例如從阿里雲下載的證書。
- 在/etc/nginx/sites-available目錄中新建名爲 www.example.com 的文件,並輸入以下內容:
server {
# 根目錄已經有個default了
# listen 80 default_server;
# listen [::]:80 default_server;
listen 80;
listen [::]:80;
server_name www.example.com;
# 重定向所有HTTP網站訪問以使用HTTPS
return 301 https://$host$request_uri;
}
server {
# 指定ssl監聽端口
listen 443 ssl http2;
listen [::]:443 ssl http2;
# 證書綁定的域名,例如:www.example.com、localhost
server_name www.example.com;
# 指定服務器證書路徑
ssl_certificate /etc/nginx/ssl/www.example.com/1234567_www.example.com.pem;
# 指定私鑰證書路徑
ssl_certificate_key /etc/nginx/ssl/www.example.com/1234567_www.example.com.key;
# 配置會話緩存爲10m,大約40000個session
ssl_session_cache shared:SSL:10m;
# 配置會話緩存超時時間爲1天
ssl_session_timeout 1d;
# 禁用會話重用
ssl_session_tickets off;
# DHE密碼器的Diffie-Hellman參數, 推薦 2048 位
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# 指定SSL服務器端支持的協議版本
# ssl_protocols TLSv1.2 TLSv1.3;
ssl_protocols TLSv1.2;
# 指定加密算法
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# 在使用SSLv3和TLS協議時指定服務器的加密算法要優先於客戶端的加密算法
ssl_prefer_server_ciphers on;
# 使用嚴格傳輸策略HSTS。當瀏覽器從HTTPS網站看到此標頭時,它“獲悉”只能使用HTTPS(SSL或TLS)訪問該域。它會在max-age一段時間內(通常爲31,536,000秒,大約等於1年)緩存此信息
# includeSubDomains參數告訴瀏覽器HSTS策略也適用於當前域的所有子域,always參數確保爲所有響應(包括內部生成的錯誤響應)設置標頭
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 啓用ssl OCSP stapling功能, 服務端主動查詢OCSP結果, 提高TLS握手效率
ssl_stapling on;
# 開啓OCSP stapling 驗證
ssl_stapling_verify on;
# 使用根CA和中級證書驗證OCSP響應的信任鏈
ssl_trusted_certificate /etc/nginx/ssl/www.example.com/1234567_www.example.com.pem;
# replace with the IP address of your resolver
# resolver 127.0.0.1;
# 匹配請求
location / {
# 設置客戶端真實的域名(包括端口號)
proxy_set_header Host $host;
# 設置客戶端或上一級代理IP
proxy_set_header X-Real-IP $remote_addr;
# 設置客戶端或上一級端口
proxy_set_header X-Real-Port $remote_port;
# 設置在多層代理時會包含真實客戶端及中間每個代理服務器的IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 設置客戶端真實的協議(http還是https)
proxy_set_header X-Forwarded-Proto $scheme;
# 設置代理服務訪問地址
proxy_pass http://127.0.0.1:7060;
# 靜態資源代理
# root /var/www/www.example.com;
# try_files $uri $uri/ /index.html;
# index index.html index.htm;
}
}
- 激活
ln -s /etc/nginx/sites-available/www.example.com.conf /etc/nginx/sites-enabled/www.example.com.conf
- 使用
systemctl restart nginx
重新啓動nginx