昨天談完 web server 在做什麼,今天我們回到 Nginx !
Nginx 對比 另外一個傳統老將 Apache ,它最常被說贏 Apache 的地方是高效能的部分,能有較高的效能來自於它的架構和請求處理方式上,Nginx 的高效能主要來自於其事件驅動的非阻塞架構,能夠在資源消耗極低的情況下處理大量併發連線。
架構設計
併發處理
首先我們先安裝 Nginx,我們以 Linux 為例,Mac OS 和 Windows 的安裝,可以網路上找一下,會有很多教學。
Linux/Debian
sudo apt update
sudo apt install nginx
安裝完後,它就會自己啟動服務,我們先來查看一下服務狀態。
sudo systemctl status nginx
接著我們要找到設定檔的位置
這個指令主要是可以測試我們設定檔中的語法是否正確,也可以幫助我們找到他存放的位置。
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
在 nginx 中有幾個比較重要的檔案
首先
主要設定檔:
/etc/nginx/nginx.conf:Nginx 的主要設定檔,通常包含全域性設定。如使用者、進程數量、事件配置、HTTP 配置等。該檔案通常也會引入其他子設定檔。
子設定檔:
一般來說會被主要設定檔所引入
接著我們看一下 /etc/nginx/nginx.conf 主要設定檔都能設定些什麼。
{
user www-data; # 指定 Nginx 運行的使用者,這裡是 www-data,指的是用來處理網頁服務的請求。
worker_processes auto; # 自動設定 Nginx 使用的 process 數量,主要會根據 CPU 的配備好壞來做調整。
pid /run/nginx.pid; # Nginx 的 process ID 存放位置。
include /etc/nginx/modules-enabled/*.conf; # 載入位於 /etc/nginx/modules-enabled/ 路徑下的設定檔。
events {
worker_connections 768; # 每個進程允許的最大連接數。768 是一個常見的預設值,可以根據需求調整。
# multi_accept on; # 若開啟,進程可以同時接收多個新連接,可以提升高流量下的效能,一般來說設定為關,負載較輕的時候,可以更穩定處理每一個請情。
}
http {
##
# Basic Settings
##
sendfile on; # 啟用 sendfile() 的方式來做傳送檔案,這個方法會讓 Nginx 在傳送檔案時更有效率。
tcp_nopush on; # 與 sendfile 結合,減少網路封包數量,優化傳輸性效能。
types_hash_max_size 2048; # 設置 MIME 類型 hash 表的大小,以提升 Nginx 的查找效率。
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream; # 當無法自動識別檔案類型時,將其設為二進位流。
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
#指定支援的 SSL/TLS 協議版本,這裡包含了 TLSv1 到最新的 TLSv1.3,並排除了已不安全的 SSLv3。
ssl_prefer_server_ciphers on; # 讓伺服器選擇加密套件,而非由客戶端決定,這樣可以提高安全性。
##
# Logging Settings
##
access_log /var/log/nginx/access.log; # 存放 access log 的地方
error_log /var/log/nginx/error.log; # 存放 error log 的地方
##
# Gzip Settings
##
gzip on; # 啟用 Gzip 壓縮,減少傳輸的資料量,提高網頁載入的速度。
# 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/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf; # import 伺服器的設定檔
include /etc/nginx/sites-enabled/*; # import 各個網站的設定
}
# 郵件代理的功能
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#
}
如有有修改設定檔記得結束先用 -t 事先查看語法,再 restart service。
sudo nginx -t
sudo systemctl restart nginx
今天我們把主要設定檔了解了一下,明天我們繼續來看子設定的伺服器設定檔。