1、Nginx 配置介紹
認識Nginx服務的主配置文件 nginx.conf
nginx的配置文件一般在 /usr/local/nginx/conf/下,然后直接vim nginx.com 即可編輯
1.1 全局配置介紹
全局配置位于主配置文件最頂部,作用于整個Nginx服務進程,影響服務的資源分配、運行權限等基礎屬性
我、分別解釋一下其中配置的含義
#user nobody;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #運行用戶,若編譯時未指定則默認為 nobody
worker_processes 4;? ? ? ? ? ? ? ? ? ? ? ? ?#工作進程數量,可配置成服務器內核數 * 2,如果網站訪問量不大,一般設為1就夠用了
#error_log logs/error.log;? ? ? ? ? ? ? ? ? ?#錯誤日志文件的位置
#pid logs/nginx.pid;? ? ? ? ? ? ? ? ? ? ? ? ? ? #PID 文件的位置
1.2 I/O 事件配置介紹
I/O事件配置位于`events {}`塊中,用于定義Nginx處理網絡連接的方式,直接影響服務的并發處理能力。分別解釋一下其中的含義
events {
use epoll;? ? ? ? ? ? ? ? ? ? ? ?#?epoll 模型2.6及以上版本的系統內核,使用epoll模型可以以提高性能
worker_connections 4096;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#每個進程處理 4096 個連接
}
如提高每個進程的連接數還需執行“ulimit -n 65535”命令臨時修改本地每個進程可以同時打開的最大文件數。
在Linux平臺上,在進行高并發TCP連接處理時,最高的并發數量都要受到系統對用戶單一進程同時可打開文件數量的限制(這是因為系統為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)。
?
可使用ulimit -a命令查看系統允許當前用戶進程打開的文件數限制。
/etc/security/limits.conf
?
epoll是Linux內核為處理大批句柄而作改進的poll,是Linux下多路復用IO接口select/poll的增強版本,它能顯著的減少程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。
若工作進程數為 8,每個進程處理 4 096 個連接,則允許 Nginx 正常提供服務的連接數
已超過 3 萬個(4 096×8=32 768),當然具體還要看服務器硬件、網絡帶寬等物理條件的性
能表現。
1.3 HTTP 配置介紹
HTTP配置位于`http {}`塊中,是Web服務的核心配置區域,定義HTTP協議相關的全局參數、虛擬主機、緩存策略等
使用“http { }”界定標記,包括訪問日志、HTTP 端口、網頁目錄、默認字符集、連接保 持,以及后面要講到的虛擬 Web 主機、PHP 解析等一系列設置,其中大部分配置語句都包 含在子界定標記“server { }”內
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;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ##與sendfile配合使用,合并數據包發送
keepalive_timeout? 65;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ##連接保持超時時間,單位是秒
gzip? on;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #?gzip模塊設置,設置是否開啟gzip壓縮輸出
1.4?Web 服務的監聽配置介紹
監聽配置位于`server {}`塊中,用于定義虛擬主機的訪問入口,包括監聽端口、域名綁定等
server {? ?
listen 80;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??##監聽地址及端口
server_name www.kgc.com;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ##站點域名,可以有多個,用空格隔開
charset utf-8;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?##網頁的默認字符集
location / {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?##根目錄配置
root html;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?##網站根目錄的位置/usr/local/nginx/html??
index index.html index.php;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ##默認首頁文件名
}
error_page 500 502 503 504 /50x.html;? ? ? ? ? ? ? ? ##內部錯誤的反饋頁面
location = /50x.html {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?##錯誤頁面配置
root html;
1.4 其他配置介紹
除核心配置外,Nginx還支持多種擴展配置,滿足不同業務場景需求
?日志格式設定
$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;
$remote_user:用來記錄客戶端用戶名稱;
$time_local: 用來記錄訪問時間與時區;
$request: 用來記錄請求的url與http協議;
$status: 用來記錄請求狀態;成功是200,
$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
$http_referer:用來記錄從哪個頁面鏈接訪問過來的;
$http_user_agent:記錄客戶瀏覽器的相關信息;
通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。
location常見配置指令,root、alias、proxy_pass
root(根路徑配置):root /var/www/html
請求www.benet.com/test/1.html,會返回文件/var/www/html/test/1.html
?
alias(別名配置):alias /var/www/html
請求www.benet.com/test/1.html,會返回文件/var/www/html/1.html
?
proxy_pass(反向代理配置)
2.nginx 虛擬主機配置流程
2.1 訪問狀態統計配置
1 查看已安裝的所有模塊
先使用命令/usr/local/nginx/sbin/nginx -V 查看已安裝的 Nginx 是否包含 HTTP_STUB_STATUS 模塊?
2 修改 nginx.conf 配置文件
修改 nginx.conf 配置文件,指定訪問位置并添加 stub_status 配置
1.進入 cd /usr/local/nginx/conf目錄下然后先備份nginx文件,輸入cp nginx.conf nginx.conf.bak
然后進入nginx.conf進行配置? ? ? ?vim /usr/local/nginx/conf/nginx.conf
然后在http {}`塊中更改一下設置
http {
......
server {
listen 80;
server_name 10.0.0.250;? ? ? ? ? ?#在這里可以輸入你自己的ip地址或域名
charset utf-8;
location / {
root html;
index index.html index.htm;
}
然后在后面添加 stub_status 配置
location /status {????????????????? #訪問位置為/status
stub_status on;???????????????? #打開狀態統計功能
access_log off;???????????????? #關閉此位置的日志記錄
}
}
}
配置完成可以重啟服務
3 重啟服務,訪問測試
輸入nginx -t 進行檢查,然后重啟nginx服務,輸入:systemctl restart nginx
然后瀏覽器訪問 http://10.0.0.250/status
Active connections :表示當前的活動連接數;
server accepts handled requests :表示已經處理的連接信息,三個數字依次表示已處理的連接數、成功的TCP握手次數、 已處理的請求數。
?
可 curl -s http://10.0.0.250/status 結合 awk與if 語句進行性能監控。
?
3.?基于授權的訪問控制流程
1.先安裝httpd-tools服務輸入?yum install -y httpd-tools?
2.然后創建用戶名密碼文件,輸入:htpasswd -c /usr/local/nginx/passwd.db? ? ?fyl(這里輸入你想輸入的用戶名)然后新建密碼
3.將密碼文件所有權直接交給nginx用戶 輸入? ?chown nginx /usr/local/nginx/passwd.db
4.給文件賦予權限 chmod 400 /usr/local/nginx/passwd.db
5 修改主配置文件相對應目錄,添加認證配置項
vim /usr/local/nginx/conf/nginx.conf
? ?在? location / 下添加認證配置
auth_basic "secret";??????????????? #設置密碼提示框文字信息
auth_basic_user_file /usr/local/nginx/passwd.db;
6.重啟服務,訪問測試
nginx -t? ??systemctl restart nginx
瀏覽器訪問 http://192.168.10.21,輸入剛才的用戶名和密碼
然后登入即可
4.基于客戶端的訪問控制
訪問控制規則如下:
deny IP/IP 段:拒絕某個 IP 或 IP 段的客戶端訪問。
allow IP/IP 段:允許某個 IP 或 IP 段的客戶端訪問。
規則從上往下執行,如匹配則停止,不再往下匹配。
?
vim /usr/local/nginx/conf/nginx.conf? 進入編輯
在 location /下添加一下規則?
##添加控制規則##
allow 10.0.0.250;??????????????????? #允許訪問的客戶端 IP
deny all;?????????????????????????????? #拒絕其它IP客戶端訪問
?
systemctl restart nginx,nginx -t 檢查并重啟,然后訪問10.0.0.250
然后發現其他ip登入沒有權限,只有10.0.0.025才有
5.?基于域名的 Nginx 虛擬主機流程
1. 為虛擬主機提供域名解析
echo "10.0.0.250 www.yjs.com www.fyl.com" >> /etc/hosts
2. 為虛擬主機準備網頁文檔輸入,以下命令
mkdir -p /usr/local/nginx/html/fyl
mkdir -p /usr/local/nginx/html/yjs
echo "<h1>www.yjs.com</h1>" > /usr/local/nginx/html/fyl/index.html
echo "<h1>www.fyl.com</h1>" > /usr/local/nginx/html/yjs/index.html
3. 修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf 進入配置文件進行修改
......
http {
......
server {
listen 80;
server_name www.yjs.com;??????????????????? #設置域名www.yjs.com
charset utf-8;
access_log logs/www.yjs.access.log;???????? #設置日志名
location / {
root /usr/local/nginx/html/yjs/;???????????????? #設置www.yjs.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.fyl.com;????????????????? #設置域名www.fyl.com
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /usr/local/nginx/html/fyl/;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
4.重啟服務,訪問測試
systemctl restart nginx,ngint -t
?
瀏覽器訪問
http://www.yjs.com
http://www.fyl.com
6?基于IP 的 Nginx 虛擬主機配置
1先創建一個新網卡 ens36
2. 配置server 1? www.yjs.com設置地址為10.0.0.240:80
配置server ? www.fyl.com設置地址為10.0.0.250:80
server {
listen 10.0.0.250:80;??????????????????? #設置監聽地址10.0.0.250
?
然后檢查重啟nginx服務,然后瀏覽器訪問
http://10.0.0.240
http://10.0.0.250
7 基于端口的 Nginx 虛擬主機
1.進入 vim /usr/local/nginx/conf/nginx.conf設置,然后將www.yjs.com 的端口設置為80
......
http {
......
server {
listen 10.0.0.240:8080;????????????????? #設置監聽 8080 端口
server_name www.yjs.com;
charset utf-8;? ? ? ??
2.將www.fyl.com的端口設置為8888
server {
listen 10.0.0.250:8888;????????????????? #設置監聽 8888 端口
server_name www.fyl.com;
3 重啟服務,測試訪問
systemctl restart nginx -t?
瀏覽器訪問測試
http://192.168.10.21:8080
http://192.168.10.21:8888