Nginx服務的主配置文件
- 安裝Nginx
- 認識Nginx服務
- 全局配置
- I/O 事件配置
- HTTP 配置
- 日志格式設定
- 訪問狀態統計配置
- 查看Nginx已安裝模塊
- 修改 nginx.conf 配置文件
- 重啟服務,訪問測試
- 基于授權的訪問控制
- 準備用戶密碼認證文件
- 修改 nginx.conf 配置文件
- 重啟服務,訪問測試
- 基于客戶端的訪問控制
- 訪問控制規則
- 示例
- 修改 nginx.conf 配置文件
- 重啟服務,訪問測試
- 訪問控制注意事項
- Nginx虛擬主機
- 準備工作
- 為虛擬主機準備網頁文檔
- 基于域名的 Nginx 虛擬主機
- 為虛擬主機提供域名解析
- 修改Nginx的配置文件
- 重啟服務,訪問測試
- 基于IP 的 Nginx 虛擬主機
- 新增網卡配置
- 修改Nginx的配置文件
- 重啟服務,訪問測試
- 基于端口的 Nginx 虛擬主機
- 修改Nginx的配置文件
- 重啟服務,訪問測試
安裝Nginx
鏈接: 安裝Nginx
安裝Nginx服務請轉移到上文博客
認識Nginx服務
- 全局塊:全局配置,對全局生效。
- events塊:配置影響 Nginx 服務器與用戶的網絡連接。
- http塊:配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。
- server塊:配置虛擬主機的相關參數,一個 http 塊中可以有多個 server 塊。
- location塊:用于配置匹配的 uri 。
- upstream:配置后端服務器具體地址,負載均衡配置不可或缺的部分。
配置文件位置
/usr/local/nginx/conf/nginx.conf
全局配置
#user nobody; #運行用戶,若編譯時未指定則默認為 nobody
worker_processes 1; #工作進程數量,一般設置為和 CPU 核數一樣。設置為auto,nginx將會自己獲取這個數值
#error_log logs/error.log; #錯誤日志文件的位置
#pid logs/nginx.pid; #PID 文件的位置
worker_rlimit_nofile 65535; #指定 worker 子進程可以打開的最大文件句柄數,默認為1024
I/O 事件配置
2.I/O 事件配置
events {use epoll; #使用 epoll I/O模型,2.6及以上版本的系統內核,建議使用epoll模型以提高性能worker_connections 65535; #每個 worker 子進程能夠處理的最大并發連接數multi_accept on; #是否一次性將監聽到的連接全接收進來,默認為off,關閉時一次接收一條連接accept_mutex on; #默認為on,開啟時表示以串行方式接入新連接,否則將通報給所有worker。這可能會浪費資源并產生不可預計的后果,例如驚群問題
}
#如提高每個進程的連接數還需執行“ulimit -HSn 65535”命令臨時修改本地每個進程可以同時打開的最大文件數。
#在Linux平臺上,在進行高并發TCP連接處理時,最高的并發數量都要受到系統對用戶單一進程同時可打開文件數量的限制(這是因為系統為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)。
#可使用ulimit -a命令查看系統允許當前用戶進程打開的文件數限制。
#epoll是Linux內核為處理大批句柄而作改進的poll,是Linux下多路復用IO接口select/poll的增強版本,它能顯著的減少程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。
#worker_processes的值和work_connections的值決定了最大并發數量,最大并發數計算方式為:worker_processesworker_connections。但在反向代理場景中計算方法不同,因為nginx既要維持和客戶端的連接,又要維持和后端服務器的連接,因此處理一次連接要占用2個連接,所以最大并發數計算方式為:worker_processesworker_connections/2。
HTTP 配置
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和tcp_nodelay用于防止網絡阻塞tcp_nopush on;tcp_nodelay on;##連接保持超時時間,單位是秒#keepalive_timeout 0;keepalive_timeout 65;##gzip模塊設置,設置是否開啟gzip壓縮輸出#gzip on;##Web 服務的監聽配置server {##監聽地址及端口listen 80; ##站點域名,可以有多個,用空格隔開server_name www.kgc.com;##網頁的默認字符集charset utf-8;##根目錄配置location / {##網站根目錄的位置/usr/local/nginx/htmlroot html;##默認首頁文件名index index.html index.php;}##內部錯誤的反饋頁面error_page 500 502 503 504 /50x.html;##錯誤頁面配置location = /50x.html {root html;}}
}
日志格式設定
r e m o t e a d d r 與 remote_addr與 remotea?ddr與http_x_forwarded_for用以記錄客戶端的ip地址;
$remote_user:用來記錄客戶端用戶名稱;
$time_local: 用來記錄訪問時間與時區;
$request: 用來記錄請求的url與http協議;
$status: 用來記錄請求狀態;成功是200,
$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
$http_referer:用來記錄從哪個頁面鏈接訪問過來的;
h t t p u s e r a g e n t :記錄客戶瀏覽器的相關信息;通常 w e b 服務器放在反向代理的后面,這樣就不能獲取到客戶的 I P 地址了,通過 http_user_agent:記錄客戶瀏覽器的相關信息; 通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過 httpu?sera?gent:記錄客戶瀏覽器的相關信息;通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。
location常見配置指令,root、alias、proxy_pass
root(根路徑配置,可以寫在 http、server、location 等配置中):root /var/www/html
請求www.kgc.com/test/1.html,會返回文件/var/www/html/test/1.html
alias(別名配置,只能寫在 location 中):alias /var/www/html/ 注:使用 alias 末尾要添加 /
請求www.kgc.com/test/1.html,會返回文件/var/www/html/1.html
proxy_pass(反向代理配置)
訪問狀態統計配置
查看Nginx已安裝模塊
查看已安裝的 Nginx 是否包含HTTP_STUB_STATUS 模塊
cat /opt/nginx-1.12.0/auto/options | grep YES #可查看 nginx 已安裝的所有模塊/usr/local/nginx/sbin/nginx -V 查看已安裝的模塊
修改 nginx.conf 配置文件
cd /usr/local/nginx/confcp nginx.conf nginx.conf.bak #備份原來的配置文件vim /usr/local/nginx/conf/nginx.confhttp {......server {listen 80;server_name www.kgc.com;charset utf-8;location / {root html;index index.html index.php;}##添加 stub_status 配置##location /status { #訪問位置為/statusstub_status on; #打開狀態統計功能access_log off; #關閉此位置的日志記錄}}}
重啟服務,訪問測試
nginx -t #檢查配置文件是否配置正確
systemctl restart nginx
瀏覽器訪問 http:///status
Active connections:表示當前的活動連接數,即當前與 Nginx 服務器建立的連接數。
server accepts handled requests :表示已經處理的連接信息
三個數字依次表示服務器已接收的連接數;服務器成功處理的連接數;服務器累計處理的總請求數(在保持連接模式下,請求數量可能會大于連接數量)
Reading:表示當前正在從客戶端讀取數據的連接數。
Writing:表示當前正在向客戶端寫入數據的連接數。
Waiting:表示當前空閑并等待請求的連接數。
可 curl -Ls http://192.168.80.10/status 結合 awk與if 語句進行性能監控。
基于授權的訪問控制
準備用戶密碼認證文件
yum install -y httpd-tools #下載安裝httpd-toolshtpasswd -c /usr/local/nginx/passwd.db wl #創建文件并在文件內創建用戶wlchown nginx /usr/local/nginx/passwd.db #更改文件擁有者chmod 400 /usr/local/nginx/passwd.db #更改用戶訪問權限
修改 nginx.conf 配置文件
vim /usr/local/nginx/conf/nginx.conf
####只對訪問狀態統計站點生效......server {location /status {......##添加認證配置##auth_basic "secret"; #設置密碼提示框文字信息auth_basic_user_file /usr/local/nginx/passwd.db;}}
重啟服務,訪問測試
nginx -t #檢查配置文件是否配置正確
systemctl restart nginx
瀏覽器訪問 http:///status
輸入剛剛創建的用戶和密碼,才可以繼續訪問
如需要再次測試,請提前清楚瀏覽器訪問數據
基于客戶端的訪問控制
訪問控制規則
deny IP/IP 段:拒絕某個 IP 或 IP 段的客戶端訪問。
allow IP/IP 段:允許某個 IP 或 IP 段的客戶端訪問。
規則從上往下執行,如匹配則停止,不再往下匹配。
示例
除本機外其他地址均拒絕訪問 “status” 站點
修改 nginx.conf 配置文件
vim /usr/local/nginx/conf/nginx.conf......server {location /status {......##添加控制規則##allow 192.168.80.200; #允許訪問的客戶端 IPdeny all; #拒絕其它IP客戶端訪問}}
重啟服務,訪問測試
nginx -t #檢查配置文件是否配置正確
systemctl restart nginx
- 本機訪問測試
可以訪問 - 其他端訪問測試
無法訪問
訪問控制注意事項
- 在 http{…}配置塊(對所有站點生效)
- server{…}配置塊(對當前站點所有的訪問路徑生效)
- location{…}配置塊(只對當前站點指定的URL訪問路徑生效) 中添加配置
Nginx虛擬主機
準備工作
為虛擬主機準備網頁文檔
mkdir -p /var/www/html/wl echo "<h1>www.wl.com</h1>" > /var/www/html/wl/index.htmlcat /var/www/html/wl/index.htmlmkdir -p /var/www/html/tjecho "<h1>www.tj.com</h1>" > /var/www/html/tj/index.htmlcat /var/www/html/tj/index.html
基于域名的 Nginx 虛擬主機
為虛擬主機提供域名解析
echo "<IP> <域名1> <域名2>" >> /etc/hosts
修改Nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http {
......server {listen 80;server_name www.tj.com; #設置域名www.tj.comcharset utf-8;access_log logs/www.tj.access.log; #設置日志名location / {root /var/www/html/tj; #設置www.tj.com 的工作目錄index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}server {listen 80;server_name www.wl.com; #設置域名www.wl.comcharset utf-8;access_log logs/www.wl.access.log; location / {root /var/www/html/wl;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}
}
重啟服務,訪問測試
nginx -t #檢查配置文件是否配置正確
systemctl restart nginx
瀏覽器訪問
-
http://www.tj.com
-
http://www.wl.com
基于IP 的 Nginx 虛擬主機
新增網卡配置
nmcli connection modify ens36 ipv4.addresses 10.190.33.50/24 ipv4.gateway 10.190.33.2nmcli connection up ens36
修改Nginx的配置文件
......
http {
......server {listen <網卡1IP>:80; #設置監聽地址10.190.33.30server_name www.tj.com;charset utf-8;access_log logs/www.tj.access.log; location / {root /var/www/html/tj;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}server {listen <網卡2IP>:80; #設置監聽地址10.190.33.50server_name www.wl.com;charset utf-8;access_log logs/www.wl.access.log; location / {root /var/www/html/wl;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}
}
重啟服務,訪問測試
nginx -t #檢查配置文件是否配置正確
systemctl restart nginx
瀏覽器訪問
-
"IP1"訪問
-
“IP2”訪問
基于端口的 Nginx 虛擬主機
修改Nginx的配置文件
......
http {
......server {listen 10.190.33.30:8014; #設置監聽 8014 端口server_name www.tj.com;charset utf-8;access_log logs/www.tj.access.log; location / {root /var/www/html/tj;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}server {listen 10.190.33.30:8888; #設置監聽 8888 端口server_name www.wl.com;charset utf-8;access_log logs/www.wl.access.log; location / {root /var/www/html/wl;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}
}
重啟服務,訪問測試
nginx -t #檢查配置文件是否配置正確
systemctl restart nginx
瀏覽器訪問
-
8014端口訪問
-
8888端口訪問