1. 程式人生 > >Linux-Centos7-nginx安裝

Linux-Centos7-nginx安裝

1. 安裝依賴包

yum -y install gcc gcc-c++ autoconf automake libtool make cmake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel

2. 下載Nginx原始碼包並解壓

wget -c http://nginx.org/download/nginx-1.10.3.tar.gz
tar -zxvf nginx-1.10.3.tar.gz

3. 新建nginx使用者及使用者組

useradd -s /sbin/nologin -M nginx # -s設定不允許登入,-M設定不建立家目錄

4. 編譯配置、編譯、安裝

./configure --help # 檢視編譯配置選項

./configure --prefix=/usr/local/nginx \  #  指定安裝路徑
--pid-path=/usr/local/nginx/run/nginx.pid \ #pid檔案路徑
--with-http_ssl_module \  # 指定ssl
--user=nginx \  # 指定使用者
 --group=nginx \ #指定使用者組
--with-pcre \ 
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module

make
make install /usr/local/nginx/sbin/nginx -v # 安裝後檢視版本 cat /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -t # 檢查配置是否ok

5. 啟動,停止,重啟

nginx停止、重啟
未新增nginx服務前對nginx的管理只能通過一下方式管理:
 **nginx 管理的幾種方式 -啟動Nginx** 
/usr/local/nginx/sbin/nginx 
從容停止Nginx:
kill -QUIT 主程序號 # 如上一步中的 ps 命令輸出的 29151,就是 Nginx的主程序號
快速停止Nginx: kill -TERM 主程序號 強制停止Nginx: pkill -9 nginx 平滑重啟nginx /usr/nginx/sbin/nginx -s reload

nginx 訊號管理

nginx -s signal

訊號(signal)的值可能是以下之一:

  • stop - 快速關閉服務
  • quit - 正常關閉服務
  • reload - 重新載入配置檔案
  • reopen - 重新開啟日誌檔案
  • TERM, INT - 快速關閉
  • QUIT - 正常關閉
  • HUP - 改變配置,跟上改變的時區(僅適用於FreeBSD和Linux),使用新配置啟動新的工作程序,正常關閉舊的工作程序
  • USR1 - 重新開啟日誌檔案
  • USR2 - 升級可執行檔案
  • WINCH - 正常關閉工作程序

6. firewall 新增80埠的訪問策略

firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload # 使永久策略立即生效

7. 瀏覽器或者curl訪問

curl ip地址:預設端80 

8. Nginx新增–with-http_stub_status_module

實現對Nginx執行的檢視
ip/nginx_status
在配置檔案新增以下內容:

location /nginx_status{
stub_status  on;
access_log    off;
}

在這裡插入圖片描述

Active connections: 當前nginx正在處理的活動連線數.
Server accepts handled requests request_time: nginx總共處理了3個連線,成功建立3 握手(證明中間沒有失敗的),總共處理了2 個請求,總共請求時間0。
Reading: nginx讀取到客戶端的Header資訊數.
Writing: nginx返回給客戶端的Header資訊數.
Waiting: 開啟keep-alive的情況下,這個值等於 active – (reading + writing),意思就是nginx已經處理完成,正在等候下一次請求指令的駐留連線。
所以,在訪問效率高,請求很快被處理完畢的情況下,Waiting數比較多是正常的.如果reading +writing數較多,則說明併發訪問量非常大,正在處理過程中。

9. 編譯配置選項說明

使用configure命令配置構建。 它定義了系統的各個方面,包括允許使用nginx進行連線處理的方法。
最後它建立一個Makefileconfigure命令支援以下引數:

  • --prefix = path - 定義將保留伺服器檔案的目錄。 這個同一個目錄也將用於由configure(除了庫源的路徑)和nginx.conf配置檔案中設定的所有相關路徑。
    它預設設定為/usr/local/nginx目錄。
  • --sbin-path = path - 設定nginx可執行檔案的名稱。此名稱僅在安裝期間使用。預設情況下檔名為 prefix/sbin/nginx
  • --conf-path = path - 設定nginx.conf配置檔案的名稱。 如果需要,nginx可以始終使用不同的配置檔案啟動,方法是在命令列引數-c file 指定。
    預設情況下,該檔名為:prefix/conf/nginx.conf
  • --pid-path = path - 設定將儲存主程序的程序ID的nginx.pid檔案的名稱。 安裝後,可以使用pid指令在nginx.conf配置檔案中更改檔名。
    預設情況下,檔名為:prefix/logs/nginx.pid
  • --error-log-path = path - 設定主錯誤,警告和診斷檔案的名稱。 安裝後,可以在nginx.conf配置檔案中使用error_log指令更改檔名。
    預設情況下,檔名為:prefix/logs/error.log
  • --http-log-path = path - 設定HTTP伺服器主要請求日誌檔案的名稱。 安裝後,可以使用access_log指令在nginx.conf配置檔案中更改檔名。
    預設情況下,檔名為:prefix/logs/access.log
  • --build = name - 設定一個可選的nginx構建名稱。
  • --user = name - 設定非特權使用者的名稱,該使用者的憑據將由工作程序使用。 安裝後,可以使用user指令在nginx.conf配置檔案中更改名稱。 預設的使用者名稱是:nobody
  • --group = name - 設定由工作程序使用其憑據的組的名稱。 安裝後,可以使用user指令在nginx.conf配置檔案中更改名稱。 預設情況下,組名稱設定為非特權使用者的名稱。
  • --with-select_module--without-select_module — 啟用或禁用構建允許伺服器使用select()方法的模組。
    如果平臺似乎不支援更合適的方法(如kqueueepoll/dev/poll),則會自動構建該模組。
  • --with-poll_module--without-poll_module — 啟用或禁用構建允許伺服器使用poll()方法的模組。
    如果平臺似乎不支援更合適的方法(如kqueueepoll/dev/poll),則會自動構建該模組。
  • --without-http_gzip_module - 禁用構建壓縮HTTP伺服器響應的模組。 需要zlib庫來構建和執行此模組。
  • --without-http_rewrite_module - 禁用構建一個允許HTTP伺服器重定向請求並更改請求URI的模組。 需要PCRE庫來構建和執行此模組。
  • --without-http_proxy_module - 禁用構建HTTP伺服器代理模組。
  • --with-http_ssl_module - 可以構建一個將HTTPS協議支援新增到HTTP伺服器的模組。 預設情況下不構建此模組。 OpenSSL庫是構建和執行該模組所必需的。
  • --with-pcre = path - 設定PCRE庫源的路徑。庫發行版(4.4 - 8.40版)需要從PCRE站點下載並提取。 其餘的由nginx的./configuremake完成。 該庫是 location
    指令和ngx_http_rewrite_module模組中正則表示式支援所必需的。
  • --with-pcre-jit - 使用“即時編譯”支援構建PCRE庫。
  • --with-zlib = path - 設定zlib庫的源路徑。 庫分發(版本1.1.3 - 1.2.11)需要從zlib站點下載並提取。 其餘的由nginx的./configuremake完成。 該庫是ngx_http_gzip_module模組所必需的。
  • --with-cc-opt = parameters - 設定將新增到CFLAGS變數的其他引數。 在FreeBSD下使用系統PCRE庫時,應指定--with-cc-opt="-I /usr/local/include"
    如果需要增加select()所支援的檔案數,那麼也可以在這裡指定,如:--with-cc-opt="-D FD_SETSIZE=2048"
  • --with-ld-opt = parameters - 設定連結過程中使用的其他引數。 當在FreeBSD下使用系統PCRE庫時,應指定--with-ld-opt="-L /usr/local/lib"
  • --with-http_stub_status_module -設定Nginx服務狀態監控,需要配合location使用
    location /nginx_status { stub_status on; access_log off; }

10. nginx 重定向實現新舊域名過渡(www.example1.com ->www.example2.com)

利用rewrite實現

server {
	server_name www.example1.com;
	rewrite ^/(.*)$  http://www.example2.com/$1 permanent;
}
  • 利用Nginx核心變數$host 實現
server {
	server_name www.example2.com www.example1.com;
	if ($host != 'www.example2.com' ) {
		rewrite ^/(.*)$  http://www.example2.com/$1 permanent;
	}
}

if/rewrite/set/break命令

  • if語法:if (condition) {} # 預設值none
    • 使用欄位:server 、location
server {
    listen       80;
    server_name www.example.com;
    access_log  logs/host.access.log  main;
    location / {
    root   /var/www/html;
    index  index.html index.htm;
    }
    location ~*\.(gif|jpg|jpeg|png|bmp|swf|htm|html|css|js)$  {
                root    /usr/local/nginx/www/img;
               if (!-f $request_filename)
               {
                  root    /var/www/html/img;
                }
                if (!-f $request_filename)
               {
                  root    /apps/images;
                }
        }
        location ~*\.(jsp)$  {
                root    /webdata/webapp/www/ROOT;
               if (!-f $request_filename)
               {
                  root    /usr/local/nginx/www/jsp;
                }
               proxy_pass http://127.0.0.1:8888;
        }
}
  • set語法:set variable value # 預設值0
    • 使用欄位:server 、location 、if
location / {
proxy_pass http://127.0.0.1:8080/;
set $query $query_string;
rewrite /dede /wordpress?$query?;
}
  • rewrite語法:rewrite regx flag # 預設值none
    • 使用欄位:server 、location 、if
location ~ ^/best/ {
           rewrite ^/best/(.*)$ /test/$1  break;
           proxy_pass  http://www.example.com;
 }
  • break語法:break # 預設值none
    • 使用欄位:server 、location 、if
server {
    listen       80;
    server_name  www.ep.cn www.example.com;
    if ($host != 'www.tb.cn') {
     rewrite ^/(.*)$ http://www.ep.cn/error.txt
    break;
    rewrite ^/(.*)$ http://www.ep.cn/$1 permanent;
        }
}

這個例子定義了兩個域名www.ep.cn和www.example.com,當通過域名www.example.com訪問網站時,會將請求重定向到http://www.ep.cn/error.txt頁面,由於設定了break命令,因此下面的rewrite規則不再執行,直接退出。

11. ngx_http_access_module模組實現ip地址訪問限制

示例:

location / {
    deny 192.168.1.80;
    allow 192.168.1.0/24;
    allow 192.16.1.0/16;
    deny all;
}

12. 目錄訪問許可權

location /images/ {
    autoindex on; # Nginx預設是不允許列出整個目錄的。autoindex on來啟用目錄流量
    autoindex_exact_size off; # 預設為on,顯示出檔案的確切大小,單位是bytes。改為off後,顯示出檔案的大概大小,單位是kB或者MB或者GB
    autoindex_localtime on; # 預設為off,顯示的檔案時間為GMT時間。改為on後,顯示的檔案時間為檔案的伺服器時間
}

13. 正則表示式

正則表示式匹配:
~表示區分大小寫匹配。
~*表示不區分大小寫匹配。
和!*分別表示區分大小寫不匹配以及不區分大小寫不匹配。
檔案及目錄匹配:
-f和!-f用來判斷是否存在檔案。
-d和!-d用來判斷是否存在目錄。
-e和!-e用來判斷是否存在檔案或目錄。
-x和!-x用來判斷檔案是否可執行

14. Nginx內建變數

$args,此變數與請求行中的引數相等。
$document_root,此變數等同於當前請求的root命令指定的值。
$uri,此變數等同於當前request中的URI。
$document_uri,此變數與$uri含義一樣。
$host,此變數與請求頭部中“Host”行指定的值一致。
$limit_rate,此變數用來設定限制連線的速率。
$request_method,此變數等同於request的method,通常是“GET”或“POST”。
$remote_addr,此變量表示客戶端IP地址。
$remote_port,此變量表示客戶端埠。
$remote_user,此變數等同於使用者名稱,由ngx_http_auth_basic_module認證。
$request_filename,此變量表示當前請求檔案的路徑名,由root或alias與URI request組合而成。
$request_uri,此變量表示含有引數的完整的初始URI。
$query_string,此變數與$args含義一致。
$server_name,此變量表示請求到達的伺服器名。
$server_port,此變量表示請求到達的伺服器的埠號。

  1. nginx 下安裝快取服務模組

Nginx自帶快取服務主要有proxy_cache 和fastcgi_cache命令集構成,前者用於反向代理時對後端內容源伺服器進行快取,後者主要用於對fastcgi的動態快取。第三方模組ngx_slowfs_cache也可以實現快取服務配置。