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進行連線處理的方法。
最後它建立一個Makefile
。configure
命令支援以下引數:
--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()
方法的模組。
如果平臺似乎不支援更合適的方法(如kqueue
,epoll
或/dev/poll
),則會自動構建該模組。--with-poll_module
和--without-poll_module
— 啟用或禁用構建允許伺服器使用poll()
方法的模組。
如果平臺似乎不支援更合適的方法(如kqueue
,epoll
或/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的./configure
和make
完成。 該庫是location
指令和ngx_http_rewrite_module
模組中正則表示式支援所必需的。--with-pcre-jit
- 使用“即時編譯”支援構建PCRE庫。--with-zlib = path
- 設定zlib庫的源路徑。 庫分發(版本1.1.3 - 1.2.11)需要從zlib站點下載並提取。 其餘的由nginx的./configure
和make
完成。 該庫是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,此變量表示請求到達的伺服器的埠號。
- nginx 下安裝快取服務模組
Nginx自帶快取服務主要有proxy_cache 和fastcgi_cache命令集構成,前者用於反向代理時對後端內容源伺服器進行快取,後者主要用於對fastcgi的動態快取。第三方模組ngx_slowfs_cache也可以實現快取服務配置。
- 使用自帶快取模組實現
需要編譯時新增–ngx_cache_purge-xx(版本)
下載ngx_cache_purge模組
wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz