在實際項目中,Nginx經(jīng)常被用作反向代理、負載均衡和靜態(tài)服務器,主要通過配置文件實現(xiàn)功能贮泞。Nginx服務器的配置信息主要集中在nginx.conf這個配置文件中楞慈,并且所有的可配置選項大致分為以下幾個部分。
- main:用于進行nginx全局信息的配置
- events:用于nginx工作模式的配置
- http:用于進行http協(xié)議信息的一些配置
- server:用于進行服務器訪問信息的配置
- location:用于進行訪問路由的配置
- upstream:用于進行負載均衡的配置
main
# user nobody nobody; #nginx worker進程運行用戶和運行組
worker_processes 2; #開啟的子進程數(shù)量啃擦,一般為CPU內核數(shù)量整數(shù)倍
# error_log logs/error.log #錯誤日志文件輸出
# error_log logs/error.log notice
# error_log logs/error.log info
# pid logs/nginx.pid #pid文件位置
worker_rlimit_nofile 1024; #一個進程可以打開最多文件數(shù)量的描述
event
event {
worker_connections 1024; #最大可接收的連接數(shù)量
multi_accept on; #指定nginx在收到一個新連接通知后盡可能多的接受更多的連接
use epoll; #配置指定了線程輪詢的方法抖部,如果是linux2.6+,使用epoll议惰,如果是BSD如Mac請使用Kqueue
}
http
http {
##
# 基礎配置
##
sendfile on; #開啟sendfile功能慎颗,將文件回寫交給數(shù)據(jù)緩沖完成,提升性能
tcp_nopush on; #讓nginx在一個數(shù)據(jù)包中發(fā)送所有的頭文件言询,而不是一個一個單獨發(fā)
tcp_nodelay on; #讓nginx不要緩存數(shù)據(jù)俯萎,而是一段一段發(fā)送,如果數(shù)據(jù)的傳輸有實時性的要求的話可以配置它运杭,發(fā)送完一小段數(shù)據(jù)就立刻能得到返回值
keepalive_timeout 65; #給客戶端分配連接超時時間夫啊,一般設置較短,工作持續(xù)性更好
client_header_timeout 10:設置請求頭的超時時間
client_body_timeout 10:設置請求體的超時時間
send_timeout 10:指定客戶端響應超時時間辆憔,如果客戶端兩次操作間隔超過這個時間撇眯,服務器就會關閉這個鏈接
types_hash_max_size 2048; #混淆數(shù)據(jù),影響三列沖突率虱咧,值越大消耗內存越多熊榛,散列key沖突率會降低,檢索速度更快腕巡;值越小key玄坦,占用內存較少,沖突率越高绘沉,檢索速度變慢
# server_tokens off; #雖然不會讓nginx執(zhí)行速度更快煎楣,但是可以在錯誤頁面關閉nginx版本提示,對于網(wǎng)站安全性的提升有好處
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types; #指定在當前文件中包含另一個文件的指令
default_type application/octet-stream; #指定默認處理的文件類型可以是二進制
##
# SSL證書配置
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on; #設置協(xié)商加密算法時车伞,優(yōu)先使用我們服務端的加密套件择懂,而不是客戶端瀏覽器的加密套件
##
# 日志配置
##
access_log /var/log/nginx/access.log; #存儲訪問記錄的日志
error_log /var/log/nginx/error.log; #存儲記錄錯誤發(fā)生的日志
##
# Gzip 壓縮配置
##
gzip on; #使用gzip壓縮傳輸數(shù)據(jù),減少發(fā)送數(shù)據(jù)量另玖,提升性能
gzip_disable "msie6"; #為指定的客戶端禁用gzip功能
# gzip_vary on;
# gzip_proxied any; #允許或者禁止壓縮基于請求和響應的響應流困曙。我們設置為any,意味著將會壓縮所有的請求日矫。
# gzip_comp_level 6; #設置數(shù)據(jù)的壓縮等級赂弓。這個等級可以是1-9之間的任意數(shù)值绑榴,9是最慢但是壓縮比最大的
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript
text/xml application/xml application/xml+rss text/javascript; #設置需要壓縮的數(shù)據(jù)格式
open_file_cache 打開緩存的同時也指定了緩存最大數(shù)目哪轿,以及緩存的時間。我們可以設置一個相對高的最大時間翔怎,這樣我們可以在它們不活動超過20秒后清除掉窃诉。
open_file_cache_valid 在open_file_cache中指定檢測正確信息的間隔時間杨耙。
open_file_cache_min_uses 定義了open_file_cache中指令參數(shù)不活動時間期間里最小的文件數(shù)。
open_file_cache_errors 指定了當搜索一個文件時是否緩存錯誤信息飘痛,也包括再次給配置中添加文件珊膜。我們也包括了服務器模塊,這些是在不同文件中定義的宣脉。如果你的服務器模塊不在這些位置车柠,你就得修改這一行來指定正確的位置。
##
# 虛擬主機配置
##
#包含其他獨立的conf文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server
srever模塊配置是http模塊中的一個子模塊塑猖,用來定義一個虛擬訪問主機竹祷,也就是一個虛擬服務器的配置信息
server {
listen 80; #端口
server_name localhost 192.168.1.100; #指定ip地址或者域名,多個配置之間用空格分隔
root /nginx/www; #虛擬主機內的根目錄
index index.php index.html index.html; #用戶訪問web網(wǎng)站時的全局首頁
charset utf-8; #配置網(wǎng)頁的默認編碼格式
access_log logs/access.log; #訪問記錄日志存放路徑
error_log logs/error.log; #訪問錯誤日志的存放路徑
location / { #表示匹配訪問根目錄
root /nginx/www; #指定訪問根目錄時
index index.php index.html index.htm; #在不指定訪問具體資源時羊苟,默認展示的資源文件列表
}
#反向代理模式塑陵,通過反向代理代理服務器訪問模式,通過proxy_set配置讓客戶端訪問透明化
location / {
proxy_pass http://localhost:8888;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header Host $http_host;
}
#uwsgi配置
location / {
include uwsgi_params;
uwsgi_pass localhost:8888
}
#upstream模塊蜡励,主要負責負載均衡的配置令花,通過默認的輪詢調度方式來分發(fā)請求到后端服務器
upstream name {
ip_hash; #指定請求調度算法,默認是weight權重輪詢調度
server 192.168.1.100:8000;
server 192.168.1.100:8001 down; #此服務器暫停使用
server 192.168.1.100:8002 max_fails=3; #最大失敗次數(shù)凉倚,超過則暫停服務
server 192.168.1.100:8003 fail_timeout=20s; #如請求失敗兼都,暫停多久重新發(fā)起請求
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
......
}