一、Nginx概述
1.1Nginx的特點
(1)一款高性能、輕量級web服務
- 穩定性高
- 系統資源消耗低高
- 對HTTP并發連接的處理能力
(2)單臺物理服務器可支持30000~50000個并發請求
1.2 Nginx編譯安裝
- 安裝支持軟體
- 創建運行用戶、組
- 編譯安裝Nginx
1.3Nginx運行控制
- 檢查組態檔
- 啟動、多載配置、停止Nginx
1.4Nginx和Apache的區別
(1)nginx相對于apache的優點∶
- 輕量級,同樣起web服務,比apache占用更少的記憶體及資源
- 抗并發,nginx處理請求是異步非阻塞的,而apache是阻塞型的,在高并發下,nginx能保持低資源低消耗高性能
- 高度模塊化的設計,撰寫模塊相對簡單
(2)apache相對于nginx的優點∶
- Rewrite比nginx的rewrite強大 (rewrite的主要功能就是實作統一資源定位符URL的跳轉)
- 模塊多,基本想到的都可以找到
- 少bug, nginx的bug相對較多
- 超穩定
總結:一般來說,需要性能的web服務,用nginx, 若不需要性能只求穩定,就選用apache
二、編譯安裝Nginx服務的操作步驟
2.1關閉防火墻,將安裝nginx所需軟體包傳到/opt目錄下
systemctl stop firewalld systemctl disable firewalld setenforce 0 # 將壓縮包傳入到/opt目錄下 nginx-1.12.2.tar.gz
2.2安裝依賴包
nginx的配置及運行需要pcre、zlib等軟體包的支持,因此需要安裝這些安裝的開發包,以便提供相應的庫和頭檔案
yum install -y pcre-devel zlib-devel gcc gcc-c++ make
2.3創建運行用戶、組(Nginx 服務程式默認以 nobody 身份運行,建議為其創建專門的用戶賬號,以便更準確地控制其訪問權限)
useradd -M -s /sbin/nologin nginx
2.4編譯安裝nginx
cd /opt tar zxvf nginx-1.12.2.tar.gz ./configure \ > --prefix=/usr/local/nginx \ #指定nginx的安裝路徑 > --user=nginx \ #指定用戶名 > --group=nginx \ #指定組名 > --with-http_stub_status_module #啟用 http_stub_status_module模塊以變持狀態線計 make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ ##讓系統識別nginx的操作命令
2.5檢查、啟動、重啟、停止 nginx服務
nginx -t #檢查組態檔是否配置正確 #啟動:nginx #停止 cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID號 kill -3 <PID號> #直接殺死 kill -s QUIT <PID號> #優雅的殺死() killall -3 nginx killall -s QUIT nginx #多載 kill -1 <PID號> kill -s HUP <PID號> killall -1 nginx killall -s HUP nginx
#日志分割,重新打開日志檔案 kill -USR1 <PID號> #平滑升級 kill -USR2 <PID號>
新版本升級∶ tar -zxvf nginx-1.xx.xX. tar.gz cd nginx-1.xx. xx ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module \ --with-http_ssl_module make mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old cp objs/nginx /usr/local/nginx/sbin/nginx make upgrade 或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
2.6添加nginx系統服務
方法一: vim /etc/init.d/nginx #創建腳本檔案內容如下: #!/bin/bash #chkconfig: - 99 20 #description:Nginx Server Control Script COM="/usr/local/nginx/sbin/nginx" PID="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $COM ;; stop) kill -s QUIT $(cat $PID) ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PID) ;; *) echo "Usage:$0 {start|stop|restart|reload}" exit 1 esac exit 0
chmod +x /etc/init.d/nginx chkconfig --add nginx systemctl daemon-reload #磁盤上的ngin服務更改,運行'systemctl daemon-reload'重新加載單元, systemctl start nginx systemctl stop nginx
方法二: vim /lib/systemd/system/nginx.service [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecrReload=/bin/kill -s HUP SMAINPID ExecrStop=/bin/kill-s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
chmod 754 /lib/systemd/ system/nginx.service systemctl start nginx.service systemctl enable nginx.service
[Unit]:服務的說明
Description:描述服務
After:依賴,當依賴的服務啟動之后再啟動自定義的服務
[Service]服務運行引數的設定
Type=forking是后臺運行的形式,使用此啟動型別應同時指定
PIDFile以便systemd能夠跟蹤服務的主行程,
ExecStart為服務的具體運行命令
ExecReload為重啟命令
ExecStop為停止命令
PrivateTmp=True表示給服務分配獨立的臨時空間
注意:啟動、重啟、停止命令全部要求使用絕對路徑
[Install]服務安裝的相關設定,可設定為多用戶
三、實體操作:編譯安裝Nginx服務
3.1關閉防火墻,將安裝nginx所需軟體包傳到/opt目錄下

3.2安裝依賴包

3.3創建運行用戶、組
![]()
3.4編譯安裝Nginx
3.4.1 解壓Nginx軟體包
3.4.2 安裝相關模塊
3.4.3 編譯安裝
3.4.4 將Nginx鏈接到/user/local/sbin下
![]()
3.5檢查、啟動、重啟、停止Nginx服務
3.5.1 檢查和啟動

3.5.2 停止、重啟nginx服務
3.5.3 多載服務

3.6添加nginx 系統服務
3.6.1vim/lib/systemd/system/nginx.service檔案,并添加配置內容

3.6.2賦予權限并開啟服務



四、認識Nginx服務的主組態檔
vim /usr/local/nginx/conf/nginx.conf
4.1全域配置
#user nobody; #運行用戶,若編譯時未指定則默認為 nobody worker_processes 1; #作業行程數量,可配置成服務器內核數 * 2,如果網站訪問量不大,一般設為1就夠用了 #error_log logs/error.log; #錯誤日志檔案的位置 #pid logs/nginx.pid; #PID 檔案的位置
4.2I/O事件配置
events { use epoll; #使用epoll模型,2.6及以上版本的系統內核,建議使用epoll模型以提高性能 worker_connections 4096; #每個行程處理 4096個連接 }
如提高每個行程的連接數還需執行"ulimit -n 65535"命令臨時修改本地每個行程可以同時打開的最大檔案數,
在Linux平臺上,在進行高并發TCP連接處理時,最高的并發數量都要受到系統對用戶單一行程同時可打開檔案數量的限制(這是因為系統為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一個檔案句柄),
可使用ulimit -a命令查看系統允許當前用戶行程打開的檔案數限制,
4.3HTTP 配置
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; ##支持檔案發送(下載) ##此選項允許或禁止使用socket的TCP cORK的選項(發送資料包前先快取資料),此選項僅在使用sendfile的時候使用 #tcp_nopush on; ##連接保持超時時間,單位是秒 #keepalive_timeout 0; keepalive_timeout 65; #gzip on; ##gzip模塊設定,設定是否開啟gzip壓縮輸出 server { listen 80; ##監聽地址及埠 server_name www.fzr.com; ##站點域名,可以有多個,用空格隔開 #charset utf-8; #網頁的默認字符集 #access_log logs/host.access.log main; location / { ##根目錄配置 root html; ##網站根目錄的位置/usr/local/nginx/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; }
日志格式設定∶
$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地址了,通過Sremote_add拿到的IP地址是反向代理服務器的iP地址,反向代理服務器在轉發請求的http頭資訊中,可以增加x_forwarded_for資訊,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址,
location常見配置指令, root、alias、proxy_ pass
root (根路徑配置)∶ 請求ww.xkq.com/test/1.jpg,會回傳檔案/usr/local/nginx/html/test/1.jpg
alias (別名配置)∶請求www.xkq.com/test/1.jpg,會回傳檔案/usr/local/nginx/html/1.jpg
五、訪問狀態統計配置
5.1訪問狀態統計配置的操作步驟
5.1.1.先使用命令/usr/local/nginx/sbin/nginx -V查看已安裝的Nginx 是否包含HTTP_STUB_STATUS模塊
5.1.2.修改 nginx.conf 組態檔,指定訪問位置并添加 stub_status 配置(修改之前進行備份)
cd /usr/local/nginx/conf/ cp nginx.conf nginx.conf.bak vim nginx.conf server { listen 80; server_name www.clj.com; charset utf-8; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } ##添加 stub_status 配置 location /status { ##訪問位置為/status stub_status on; ##打開狀態統計功能 access_log off; ##關閉此位置的日志記錄 }
5.1.3、重啟服務,訪問測驗
systemctl restart nginx
瀏覽器訪問 http;//192.168.10.10/status
Active connections ∶ 表示當前的活動連接數;
server accepts handled requests∶表示已經處理的連接資訊,三個數字依次表示:已處理的連接數、成功的TCP握手次數,已處理的請求數,
可curl http∶//192.168.10.10/status 結合 awk與if 陳述句進行性能監控
5.2實體操作:訪問狀態統計配置
5.2.1 使用命令/usr/local/nginx/sbin/nginx -V查看已安裝的 Nginx 是否包含HTTP_STUB STATUS模塊
5.2.2 修改nginx.conf 組態檔,指定訪問位置并添加stub_status 配置

5.2.3 重啟服務后進行訪問測驗
![]()

六、基于授權的訪問控制
6.1基于授權的訪問控制的操作步驟
6.1.1 生成用戶密碼認證檔案
yum install -y httpd-tools htpasswd -c /usr/local/nginx/passwd.db zhangsan chown nginx /usr/local/nginx/passwd.db chmod 400 /usr/local/nginx/passwd.db
6.1.2 修改主組態檔相對應目錄,添加認證配置項
vim /usr/local/nginx/conf/nginx.conf ..... server { location / { ..... ##添加認證配置## auth basic "secret"; #設定密碼提示框文字資訊 auth_basic_user_file /usr/local/nginx/passwd.db; } }
6.1.3 重啟服務,訪問測驗
nginx -t
systemctl restart nginx.service
瀏覽器訪問 http∶//192.168.10.10
6.2實體操作:基于授權的訪問控制
6.2.1 生成用戶密碼認證檔案


6.2.2 修改主組態檔相對應目錄,添加認證配置項
6.2.3 重啟服務,訪問測驗


6.3基于客戶端訪問控制
6.3.1 基于客戶端訪問控制的操作步驟
訪問控制規則如下:
- deny IP/IP段: 拒絕某個IP或IP段的客戶端訪問
- allow IP/IP 段: 允許某個IP或IP段的客戶端訪問
- 規則從上往下執行,如匹配則停止,不再往下匹配
6.3.2 實體操作:基于客戶端訪問控制
vim /usr/local/nginx/conf/nginx.conf location / { root html; index index.html index.htm; auth_basic "secret"; auth_basic_user_file /usr/local/nginx/passwd.db; # 添加控制規則 deny 192.168.2.66; #拒絕訪問的客戶端IP allow all; #允許其他所有客戶端訪問 } systemctl restart nginx
(1) 在主組態檔中添加控制規則
(2) 重啟服務并訪問測驗



轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/531499.html
標籤:其他










