簡介
高性能、輕量級的HTTP和反向代理web服務器,能夠支持高達 50,000 個併發連接數的響應,多數在Unix/Linux OS 上編譯運行。像國內很多門戶網站:百度、京東、新浪、網易、騰訊、淘寶等廣泛使用。
官網/安裝鏈接
官網:http://nginx.org/en/download.html
安裝教程:https://www.runoob.com/linux/nginx-install-setup.html
https://www.cnblogs.com/Tiancheng-Duan/p/11268148.html
安裝與部署
# package下載
$ wget http://nginx.org/download/nginx-1.10.2.tar.gz
$ wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
# gcc安裝
$ yum install gcc-c++
# openssl安裝
$ tar zxvf openssl-fips-2.0.10.tar.gz
$ cd openssl-fips-2.0.10
$ ./config && make && make install
# pcre安裝
$ tar zxvf pcre-8.40.tar.gz
$ cd pcre-8.40
$ ./configure && make && make install
# zlib安裝
$ tar zxvf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure && make && make install
# nginx安裝
$ tar zxvf nginx-1.10.2.tar.gz
$ cd nginx-1.10.2
$ ./configure && make && make install
啓動與校驗
# 建立libpcre軟鏈接
$ whereis libpcre.so.1
$ ln -s /usr/local/lib/libpcre.so.1 /lib64
# 啓動nginx服務
$ sbin/nginx
# 查看啓動狀態
$ ps -aux | grep nginx
# 關閉防火牆,可支持外網訪問
$ service iptables stop
$ chkconfig iptables off # 可選擇永久關閉
$ chkconfig --list|grep ipt # 可選擇永久關閉
nginx命令
# 配置文件路徑
$ vi /usr/local/nginx/conf/nginx.conf
# 啓動
$ /usr/local/nginx/sbin/nginx
# 停止
$ /usr/local/nginx/sbin/nginx -s stop
# 重啓
$ /usr/local/nginx/sbin/nginx -s reload
配置詳解
# 轉載於:https://www.cnblogs.com/taiyonghai/p/5610112.html
# 運行用戶
user nobody;
# pid文件
pid logs/nginx.pid;
# worker進程數,通常設置<=CPU數量,auto爲自動檢測,一般設置最大8個即可
worker_processes auto;
# 錯誤日誌
error_log logs/error.log;
# events模塊中包含nginx中所有處理連接的設置,併發響應能力的關鍵配置
events {
# 每個進程同時打開的最大連接數(最大併發數)
worker_connections 102400;
# 告訴nginx收到一個新鏈接通知後接受盡可能多的鏈接
multi_accept on;
# 一般http 1.1協議下,瀏覽器默認使用兩個併發鏈接
# 如果是反向代理,nginx需要和客戶端保持連接,還需要和後端服務器保持連接
# Http服務器時,設置max_client=worker_processes*worker_connections/2
# 反向代理時,設置max_client=worker_processes*worker_connections/4
# 最大可用客戶端數
max_client
# 使用非阻塞模型,設置複用客戶端線程的輪訓方法
use epoll;
}
# http模塊控制着nginx http處理的所有核心特性
http {
# 打開或關閉錯誤頁面中的nginx版本號等信息
server_tokens on;
# !server_tag on;
# !server_info on;
# 優化磁盤IO設置,指定nginx是否調用sendfile函數來輸出文件,普通應用設爲on,下載等磁盤IO高的應用,可設爲off
sendfile on;
# 緩存發送請求,啓用如下兩個配置,會在數據包達到一定大小後再發送數據
# 這樣會減少網絡通信次數,降低阻塞概率,但也會影響響應的及時性
# 比較適合於文件下載這類的大數據包通信場景
# tcp_nopush on;
# tcp_nodelay on;
# 設置nginx是否存儲訪問日誌,關閉這個可以讓讀取磁盤IO操作更快
access_log on;
# 設置nginx只記錄嚴重錯誤,可減少IO壓力
# error_log logs/error.log crit;
# Http1.1支持長連接
# 降低每個鏈接的alive時間可在一定程度上提高響應連接數量
# 給客戶端分配keep-alive鏈接超時時間
keepalive_timeout 30;
# 設置用戶保存各種key的共享內存的參數,5m指的是5兆
limit_conn_zone $binary_remote_addr zone=addr:5m;
# 爲給定的key設置最大的連接數,這裏的key是addr,設定的值是100,就是說允許每一個IP地址最多同時打開100個連接
limit_conn addr 100;
# include指在當前文件中包含另一個文件內容
include mime.types;
# 設置文件使用默認的mine-type
default_type text/html;
# 設置默認字符集
charset UTF-8;
# 設置nginx採用gzip壓縮的形式發送數據,減少發送數據量,但會增加請求處理時間及CPU處理時間,需要權衡
gzip on;
# 加vary給代理服務器使用,針對有的瀏覽器支持壓縮,有個不支持,根據客戶端的HTTP頭來判斷是否需要壓縮
gzip_vary on;
# nginx在壓縮資源之前,先查找是否有預先gzip處理過的資源
# !gzip_static on;
# 爲指定的客戶端禁用gzip功能
gzip_disable "MSIE[1-6]\.";
# 允許或禁止壓縮基於請求和相應的響應流,any代表壓縮所有請求
gzip_proxied any;
# 啓用壓縮的最少字節數,如果請求小於1024字節則不壓縮,壓縮過程會消耗系統資源
gzip_min_length 1024;
# 數據壓縮等級,1-9之間,9最慢壓縮比最大,壓縮比越大對系統性能要求越高
gzip_comp_level 2;
# 需要壓縮的數據格式
gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss;
# 靜態文件緩存
# 開啓緩存的同時也指定了緩存文件的最大數量,20s如果文件沒有被請求則刪除緩存
open_file_cache max=100000 inactive=20s;
# 多長時間檢查一次緩存的有效期
open_file_cache_valid 30s;
# 有效期內緩存文件最小的訪問次數,只有訪問超過2次的纔會被緩存
open_file_cache_min_uses 2;
# 當搜索一個文件時是否緩存錯誤信息
open_file_cache_errors on;
# 允許客戶端請求的最大單文件字節數
client_max_body_size 4m;
# 客戶端請求頭緩衝區大小
client_header_buffer_size 4k;
# 是否啓用對發送給客戶端的URL進行修改
proxy_redirect off;
# 後端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# nginx跟後端服務器連接超時時間(代理連接超時)
proxy_connect_timeout 60;
# 連接成功後,後端服務器響應時間(代理接收超時)
proxy_read_timeout 120;
# 後端服務器數據回傳時間(代理髮送超時)
proxy_send_timeout 20;
# 設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
proxy_buffer_size 32k;
# proxy_buffers緩衝區,網頁平均在32k以下的設置
proxy_buffers 4 128k;
# 高負荷下緩衝大小(proxy_buffers*2)
proxy_busy_buffers_size 256k;
# 設定緩存文件夾大小,大於這個值,將從upstream服務器傳
proxy_temp_file_write_size 256k;
# 1G內存緩衝空間,3天不用刪除,最大磁盤緩衝空間2G
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;
#設定負載均衡服務器列表
upstream nginx.test.com{
# 後端服務器訪問規則
# ip_hash;
# weight參數表示權重值,權值越高被分配到的機率越大
# server 10.11.12.116:80 weight=5;
# PC_Local
server 10.11.12.116:80;
# PC_Server
server 10.11.12.112:80;
# Notebook
# server 10.11.12.106:80;
}
# server代表虛擬主機,可以理解爲站點(掛載多個站點,只需要配置多個server及upstream節點即可)
server {
# 監聽80端口
listen 80;
# 識別的域名,定義使用nginx.test.com訪問
server_name nginx.test.com;
# 設定本虛擬主機的訪問日誌
access_log logs/nginx.test.com.access.log;
# 一個域名下匹配多個URI的訪問,使用location進行區分,後面緊跟着的/代表匹配規則
# 如動態資源訪問和靜態資源訪問會分別指向不同的位置的應用場景
#
# 基本語法規則:location [=|~|~*|^~] /uri/ {...}
# = 開頭表示精確匹配
# ^~ 開頭表示uri以某個常規字符串開頭,匹配成功後不再進行正則匹配
# ~ 開頭表示區分大小寫的正則匹配
# ~* 開頭表示不區分大小寫的正則匹配
# !~ 開頭表示區分大小寫的不匹配的正則
# !~* 開頭表示不區分大小寫的不匹配的正則
# / 通用匹配,任何請求都會被匹配到
#
# 理解如下:
# 有兩種匹配模式:普通字符串匹配,正則匹配
# 無開頭引導字符或以=開頭表示普通字符串匹配
# 以~或~*開頭表示正則匹配,~*表示不區分大小寫
# 【多個location時,先匹配普通字符串location,再匹配正則location】
# 只識別URI部分,例如請求爲“/test/1/abc.do?arg=xxx”
# (1)先查找是否有=開頭的精確匹配,即“location=/test/1/abc.do {...}”
# (2)再查找普通匹配,以“最大前綴”爲規則,如有以下兩個location
# location /test/ {...}
# location /test/1/ {...}
# 則匹配後一項
# (3)匹配到一個普通location後,搜索並未結束,而是暫存當前結果,並繼續進行正則搜索
# (4)在所有正則location中找到第一個匹配項後,以此匹配項爲最終結果
# 【所以正則匹配項,匹配規則受定義前後順序影響,但普通匹配不會】
# (5)如果未找到正則匹配項,則以(3)中緩存的結果爲最終結果
# (6)如果一個匹配都沒有,則返回404
# location =/ {...}與location / {...}的差別
# 前一個是精確匹配,只響應“/”的請求,所有“/xxx”形式的請求不會以“前綴匹配形式”匹配到它
# 後一個正相反,所有請求必然都是以“/”開頭,所以沒有其他匹配結果時一定會執行到它
# location ^~ / {...} ^~的意思是禁止正則匹配,表示匹配到此項後不再進行後續的正則搜索
# 相當於普通匹配模式匹配成功後就以此結果爲最終結果,停止進行後續的正則匹配
location / {
# 定義服務器的默認網站根目錄位置,可以寫相對路徑,也可以寫絕對路徑
root html;
# 定義首頁索引文件的名稱
index index.html index.htm;
# 定義轉發後端負載服務器組(**配置代理)
proxy_pass http://nginx.test.com;
}
# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# 靜態文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/{
root /var/www/virtual/htdocs;
# 過期時間1天
expires 1d;
# 關閉媒體文件日誌
access_log off;
log_not_found off;
}
# 設定查看Nginx狀態的地址
location /NginxStatus {
# !stub_status on; #無此關鍵字
access_log off;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
# 禁止訪問的文件.htxxx
location ~ /\.ht {
# deny all;禁止訪問,返回403
deny all;
# allow all;允許訪問
}
}
# 網站較多的情況下ngxin又不會請求瓶頸可以考慮掛多個站點,並把虛擬主機配置單獨放在一個文件內,引入進來
include website.conf;
}