一、Nginx的配置文件nginx.conf解析
1.1、查看現有已安裝的Nginx版本及其編譯配置參數等信息
序號 | 安裝編譯Nginx的方式 | 查看現在已有的Nginx版本及其編譯配置參數信息方法 |
1 | 使用【yum install nginx -y】命令安裝的Nginx | |
2 | 手動到Nginx官網下載源碼編譯安裝的Nginx | |
?1.2、Nginx的主要配置文件解析
????????Nginx在安裝完成后,默認的安裝路徑是【/usr/local/nginx】其中【/usr/local/nginx/conf】是配置文件路徑,該路徑下的【nginx.conf】是Nginx的主要配置文件:
序號 | nginx主要配置文件組成 | 說明 |
1 | main | main設置的指令會影響其他所有設置,相當于全局設置。 |
2 | events | events模塊用來配置影響nginx服務器或與用戶的網絡連接。 |
3 | http | http模塊可以嵌套多個server,主要用來配置代理、緩存、自定義日志格式等絕大多數功能和第三方模塊的配置。 |
4 | server | server模塊用于配置虛擬主機的相關參數內容。 |
5 | location | location模塊用于配置請求的處理規則,以及各種頁面的處理情況。 |
該表格中這五個模塊之間的關系是: 《1》main與events平級; 《2》一個http中可以有多個server; 《3》server繼承main,location繼承server。 |
user www;
worker_processes 2;
worker_cpu_affinity 01 10;
worker_rlimit_nofile 131070;
pid logs/nginx.pid;
error_log logs/error.log notice;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {use epoll;worker_connections 65535;
}http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log logs/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;#keepalive_timeout 0;keepalive_timeout 65;server_names_hash_bucket_size 128;client_max_body_size 20m;client_header_buffer_size 32k;large_client_header_buffers 4 32k;gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.1;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml;gzip_vary on;server {listen 80;server_name localhost 192.168.1.11;#charset koi8-r;access_log logs/host.access.log main;location / {root html;index index.html index.htm;}error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
?1.3、Nginx的全局配置項解析
序號 | nginx的全局配置項 | 說明 |
1 | user | 指定Nginx Worker進程運行用戶以及用戶組。 默認由nobody賬號運行,一般指定用www用戶和組運行。 |
2 | worker_processes | 設置nginx工作的進程數,一般來說,設置成CPU核的數量即可,這樣可以充分利用CPU資源。 注意:在nginx1.10版本后,worker_processes指令新增了一個配置值auto,它表示nginx會自動檢測CPU核數并打開相同數量的worker進程。 |
3 | worker_cpu_affinity | 此指令可將Nginx工作進程與指定CPU核綁定,降低由于多核CPU切換造成的性能損耗。 worker_cpu_affinity使用方法是通過1、0來表示的,CPU有多少個核?就有幾位數,1代表內核開啟,0代表內核關閉。 示例配置表示:4核CPU,開啟4個進程,每個進程都與CPU的每個核進行綁定。其中,0001表示開啟第一個cpu內核,0010表示開啟第二個cpu內核,其它含義依次類推。如果是8核CPU,綁定第一個CPU核,可以寫成00000001,綁定第二個CPU核,可以寫成00000010,依次類推。 |
4 | error_log | 用來定義全局錯誤日志文件。 ????????日志輸出級別有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日志最為最詳細,而crit輸出日志最少。? |
5 | pid | 用來指定nginx進程id的存儲文件位置。 |
6 | worker_rlimit_nofile | 用于指定一個Nginx進程可以打開的最多文件描述符數目。 設置為65535,需要使用命令“ulimit -n 65535”來設置。 |
7 | events | 設定Nginx的工作模式及連接數上限。 ???????《1》參數【use】用來指定Nginx的工作模式,Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,對于Linux系統,epoll工作模式是首選。 ? ? ? ?《2》參數【worker_connections】用于定義Nginx每個進程的最大連接數,默認是1024。在一個純Nginx(無反向代理應用)應用中,最大客戶端連接數由worker_processes和worker_connections決定,即為:max_client=worker_processes*worker_connections。 |
?1.4、HTTP服務器配置解析
序號 | HTTP的配置項 | 說明 |
1 | include | 是個主模塊指令,實現對配置文件所包含的文件的設定,可以減少主配置文件的復雜度。類似于Apache中的include方法。 |
2 | default_type | 屬于HTTP核心模塊指令,這里設定默認類型為二進制流,也就是當文件類型未定義時使用這種方式。 ????????(如:在沒有配置PHP環境時,Nginx是不予解析的,此時,用瀏覽器訪問PHP文件就會出現下載窗口)。 |
3 | log_format | 用于指定Nginx日志的輸出格式。 ????????main為此日志輸出格式的名稱,可以在下面的access_log指令中引用。 |
4 | sendfile | 用于開啟高效文件傳輸模式【on表示開啟】。 ????????將tcp_nopush和tcp_nodelay兩個指令設置為on用于防止網絡阻塞 |
5 | keepalive_timeout | 設置客戶端連接保持活動的超時時間。在超過這個時間之后,服務器會關閉該連接。時間單位是秒。 |
6 | server_names_hash_bucket_size | 為了提高快速尋找到相應server name的能力,Nginx使用散列表來存儲server name,而server_names_hash_bucket_size就是設置每個散列桶占用的內存大小。 ????????server_names_hash_bucket_size 128 |
7 | client_max_body_size | 用來設置允許客戶端請求的最大的單個文件字節數(如:設置為30m) |
8 | client_header_buffer_size | 用于指定來自客戶端請求頭的header ?buffer大小。 ????????對于大多數請求,1K的緩沖區大小已經足夠,如果自定義了消息頭或有更大的Cookie,可以增加緩沖區大小;如設置為32K。 |
9 | large_client_header_buffers? | 用來指定客戶端請求中較大的消息頭的緩存最大數量和大小。 ????????large_client_header_buffers 4 128k;表示“4”為個數,“128K”為大小,最大緩存量為4個128K。 |
?1.5、HttpGzip模塊配置解析
序號 | HttpGzip模塊配置項 | 說明 |
1 | gzip on | 用于設置開啟或者關閉gzip模塊,“gzip on”表示開啟GZIP壓縮,實時壓縮輸出數據流。 |
2 | gzip_min_length 1k | 設置允許壓縮的頁面最小字節數,頁面字節數從header頭的Content-Length中獲取。默認值是0,不管頁面多大都進行壓縮。 ????????建議設置成大于1k的字節數,小于1k可能會越壓越大。 |
3 | gzip_buffers 4 16k | 表示申請4個單位為16K的內存作為壓縮結果流緩存,默認是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果。 |
4 | gzip_http_version ?1.1 | 用于設置識別HTTP協議版本,默認是1.1,目前大部分瀏覽器已經支持GZIP解壓,使用默認即可。 |
5 | gzip_comp_level ?2 | 用來指定GZIP壓縮比,1表示壓縮比最小,處理速度最快;9表示壓縮比最大,傳輸速度快,但處理最慢,也比較消耗CPU資源。 |
6 | gzip_types | text/plain application/x-javascript text/css application/xml:用來指定壓縮的類型,無論是否指定,“text/html”類型總是會被壓縮的。 |
?1.6、server虛擬主機配置解析
序號 | server虛擬主機配置項 | 說明 |
1 | server | 定義虛擬主機開始的關鍵字。 |
2 | listen | 用于指定虛擬主機的服務端口。 |
3 | server_name | 用來指定IP地址或域名,多個域名之間用空格分開。 |
4 | index | 用于設定訪問的默認首頁地址。 |
5 | root | 用于指定虛擬主機的網頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑。 |
6 | access_log | 用來指定此虛擬主機的訪問日志存放路徑,最后的main用于指定訪問日志的輸出格式。 |
7 | error_page | 指令可以定制各種錯誤信息的返回頁面。在默認情況下,Nginx會在主目錄的html目錄中查找指定的返回頁面。 ????????特別需要注意的是,這些錯誤信息的返回頁面的大小一定要超過512K,否者會被IE瀏覽器替換為IE默認的錯誤頁面。 |
二、Nginx的管理與維護
?2.1、檢查Nginx配置文件的正確性
#檢查Nginx配置文件的正確性的方法一
/usr/local/nginx/sbin/nginx -t#檢查Nginx配置文件的正確性的方法二(“-t”參數用于檢查配置文件是否正確,但并不執行。“-c”參數用于指定配置文件路徑,如果不指定配置文件路徑,Nginx默認會在安裝時指定的安裝目錄下查找conf/nginx.conf文件)
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
注意:如果在驗證nginx.conf配置文件提示“
nginx: [emerg] getpwnam("www") failed in /usr/local/nginx/conf/nginx.conf:2
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed”錯誤時,意味著名為【www】的用戶找不到,導致驗證這個nginx.conf配置文件失敗。解決方法是創建www用戶和組:
#1-創建【www】用戶和組
useradd www#2-查看【www】用戶的uid、gid和組信息
id www
解決報錯問題后再次驗證【/usr/local/nginx/conf/nginx.conf】配置文件是否正確,如下圖驗證后顯示“
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
”信息表示配置文件的內容沒有問題。
?2.2、Nginx服務的優雅啟動、關閉和重啟
序號 | 控制nginx服務的信號 | 說明 |
1 | QUIT | 表處理完當前請求后,關閉進程。 |
2 | HUP | 表示重新加載配置,也就是關閉原有的進程,并開啟新的工作進程。 此操作不會中斷用戶的訪問請求,因此可以通過此信號平滑的重啟Nginx。 |
3 | USR1 | 用于Nginx的日志切換,也就是重新打開一個日志文件。 (如:每天要生成一個新的日志文件時,可以使用這個信號來控制)。? |
4 | USR2 | 用于平滑升級可執行程序。 |
5 | WINCH | 從容關閉工作進程,與QUIT類似。 |
#0-查看正在運行的nginx服務,并獲取到nginx服務的父進程PID編號
ps -ef | grep nginx#1-不間斷服務地重新啟動Nginx(kill -HUP Nginx的父進程PID編號)
kill -HUP 13561#2-處理完請求后再關閉nginx服務(kill -QUIT Nginx的父進程PID編號)
kill -QUIT 13561#3-啟動nginx服務
/usr/local/nginx/sbin/nginx
#3.1-重啟nginx服務
systemctl start nginx
#也可以強制殺死nginx服務然后在重啟#1-強制殺死nginx服務,不管該nginx有沒有在處理業務請求
killall -9 nginx#2-查看當前nginx服務的進程信息
ps -ef | grep nginx#3-新啟動nginx服務
systemctl start nginx
三、其他相關資料
使用源碼安裝配置Linux上的Web服務器——Nginxhttps://coffeemilk.blog.csdn.net/article/details/150780215Linux系統必學的基礎操作命令——快速上手Linux(下)
https://coffeemilk.blog.csdn.net/article/details/149037758