優(yōu)化配置
- 打開nginx.conf按照自己需求進(jìn)行配置俭茧,下面列出簡(jiǎn)單的一些常規(guī)調(diào)優(yōu)配置
#user nobody;
#==工作進(jìn)程數(shù),一般設(shè)置為cpu核心數(shù)
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
#==最大連接數(shù),一般設(shè)置為cpu*2048
worker_connections 1024;
}
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;
#tcp_nopush on;
#keepalive_timeout 0;
#==客戶端鏈接超時(shí)時(shí)間
keepalive_timeout 65;
#gzip on;
#當(dāng)配置多個(gè)server節(jié)點(diǎn)時(shí)或渤,默認(rèn)server names的緩存區(qū)大小就不夠了罢维,需要手動(dòng)設(shè)置大一點(diǎn)
server_names_hash_bucket_size 512;
#server表示虛擬主機(jī)可以理解為一個(gè)站點(diǎn),可以配置多個(gè)server節(jié)點(diǎn)搭建多個(gè)站點(diǎn)
#每一個(gè)請(qǐng)求進(jìn)來確定使用哪個(gè)server由server_name確定
server {
#站點(diǎn)監(jiān)聽端口
listen 8800;
#站點(diǎn)訪問域名
server_name localhost;
#編碼格式空闲,避免url參數(shù)亂碼
charset utf-8;
#access_log logs/host.access.log main;
#location用來匹配同一域名下多個(gè)URI的訪問規(guī)則
#比如動(dòng)態(tài)資源如何跳轉(zhuǎn)令杈,靜態(tài)資源如何跳轉(zhuǎn)等
#location后面跟著的/代表匹配規(guī)則
location / {
#站點(diǎn)根目錄,可以是相對(duì)路徑碴倾,也可以使絕對(duì)路徑
root html;
#默認(rèn)主頁(yè)
index index.html index.htm;
#轉(zhuǎn)發(fā)后端站點(diǎn)地址逗噩,一般用于做軟負(fù)載掉丽,輪詢后端服務(wù)器
#proxy_pass http://10.11.12.237:8080;
#拒絕請(qǐng)求,返回403异雁,一般用于某些目錄禁止訪問
#deny all;
#允許請(qǐng)求
#allow all;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#重新定義或者添加發(fā)往后端服務(wù)器的請(qǐng)求頭
#給請(qǐng)求頭中添加客戶請(qǐng)求主機(jī)名
proxy_set_header Host $host;
#給請(qǐng)求頭中添加客戶端IP
proxy_set_header X-Real-IP $remote_addr;
#將$remote_addr變量值添加在客戶端“X-Forwarded-For”請(qǐng)求頭的后面捶障,并以逗號(hào)分隔。 如果客戶端請(qǐng)求未攜帶“X-Forwarded-For”請(qǐng)求頭纲刀,$proxy_add_x_forwarded_for變量值將與$remote_addr變量相同
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#給請(qǐng)求頭中添加客戶端的Cookie
proxy_set_header Cookie $http_cookie;
#將使用代理服務(wù)器的主域名和端口號(hào)來替換残邀。如果端口是80,可以不加柑蛇。
proxy_redirect off;
#瀏覽器對(duì) Cookie 有很多限制芥挣,如果 Cookie 的 Domain 部分與當(dāng)前頁(yè)面的 Domain 不匹配就無法寫入。
#所以如果請(qǐng)求 A 域名耻台,服務(wù)器 proxy_pass 到 B 域名空免,然后 B 服務(wù)器輸出 Domian=B 的 Cookie,
#前端的頁(yè)面依然停留在 A 域名上盆耽,于是瀏覽器就無法將 Cookie 寫入蹋砚。
#不僅是域名,瀏覽器對(duì) Path 也有限制摄杂。我們經(jīng)常會(huì) proxy_pass 到目標(biāo)服務(wù)器的某個(gè) Path 下坝咐,
#不把這個(gè) Path 暴露給瀏覽器。這時(shí)候如果目標(biāo)服務(wù)器的 Cookie 寫死了 Path 也會(huì)出現(xiàn) Cookie 無法寫入的問題析恢。
#設(shè)置“Set-Cookie”響應(yīng)頭中的domain屬性的替換文本墨坚,其值可以為一個(gè)字符串、正則表達(dá)式的模式或一個(gè)引用的變量
#轉(zhuǎn)發(fā)后端服務(wù)器如果需要Cookie則需要將cookie domain也進(jìn)行轉(zhuǎn)換映挂,否則前端域名與后端域名不一致cookie就會(huì)無法存取
#配置規(guī)則:proxy_cookie_domain serverDomain(后端服務(wù)器域) nginxDomain(nginx服務(wù)器域)
proxy_cookie_domain localhost .testcaigou800.com;
#取消當(dāng)前配置級(jí)別的所有proxy_cookie_domain指令
#proxy_cookie_domain off;
#與后端服務(wù)器建立連接的超時(shí)時(shí)間泽篮。一般不可能大于75秒;
proxy_connect_timeout 30;
}
#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;
}
}
#當(dāng)需要對(duì)同一端口監(jiān)聽多個(gè)域名時(shí)柑船,使用如下配置帽撑,端口相同域名不同,server_name也可以使用正則進(jìn)行配置
#但要注意server過多需要手動(dòng)擴(kuò)大server_names_hash_bucket_size緩存區(qū)大小
server {
listen 80;
server_name www.abc.com;
charset utf-8;
location / {
proxy_pass http://localhost:10001;
}
}
server {
listen 80;
server_name aaa.abc.com;
charset utf-8;
location / {
proxy_pass http://localhost:20002;
}
}
}
配置詳情
nginx是一個(gè)功能非常強(qiáng)大的web服務(wù)器加反向代理服務(wù)器鞍时,同時(shí)又是郵件服務(wù)器等等
在項(xiàng)目中使用最多的三個(gè)核心功能是反向代理亏拉、負(fù)載均衡和靜態(tài)服務(wù)器
這三個(gè)功能的使用都跟nginx的配置密切相關(guān),所有的可配置選項(xiàng)大致分為以下幾個(gè)部分
main # 全局配置
events { # nginx工作模式配置
}
http { # http設(shè)置
....
server { # 服務(wù)器主機(jī)配置
....
location { # 路由配置
....
}
location path {
....
}
location otherpath {
....
}
}
server {
....
location {
....
}
}
upstream name { # 負(fù)載均衡配置
....
}
}
- 如上述配置文件所示逆巍,主要由6個(gè)部分組成:
- main:用于進(jìn)行nginx全局信息的配置
- events:用于nginx工作模式的配置
- http:用于進(jìn)行http協(xié)議信息的一些配置
- server:用于進(jìn)行服務(wù)器訪問信息的配置
- location:用于進(jìn)行訪問路由的配置
- upstream:用于進(jìn)行負(fù)載均衡的配置
main模塊
- 觀察下面的配置代碼
# user nobody nobody;
worker_processes 2;
# error_log logs/error.log
# error_log logs/error.log notice
# error_log logs/error.log info
# pid logs/nginx.pid
worker_rlimit_nofile 1024;
- 上述配置都是存放在main全局配置模塊中的配置項(xiàng)
- user用來指定nginx worker進(jìn)程運(yùn)行用戶以及用戶組及塘,默認(rèn)nobody賬號(hào)運(yùn)行
- worker_processes指定nginx要開啟的子進(jìn)程數(shù)量,運(yùn)行過程中監(jiān)控每個(gè)進(jìn)程消耗內(nèi)存(一般幾M ~ 幾十M不等)根據(jù)實(shí)際情況進(jìn)行調(diào)整蒸苇,通常數(shù)量是CPU內(nèi)核數(shù)量的整數(shù)倍
- error_log定義錯(cuò)誤日志文件的位置及輸出級(jí)別【debug / info / notice / warn / error / crit】
- pid用來指定進(jìn)程id的存儲(chǔ)文件的位置
- worker_rlimit_nofile用于指定一個(gè)進(jìn)程可以打開最多文件數(shù)量的描述
event 模塊
event {
worker_connections 1024;
multi_accept on;
use epoll;
}
- 上述配置是針對(duì)nginx服務(wù)器的工作模式的一些操作配置
- worker_connections 指定最大可以同時(shí)接收的連接數(shù)量磷蛹,這里一定要注意,最大連接數(shù)量是和worker processes共同決定的溪烤。
- multi_accept 配置指定nginx在收到一個(gè)新連接通知后盡可能多的接受更多的連接
- use epoll 配置指定了線程輪詢的方法味咳,如果是linux2.6+庇勃,使用epoll,如果是BSD如Mac請(qǐng)使用Kqueue
http模塊
作為web服務(wù)器槽驶,http模塊是nginx最核心的一個(gè)模塊责嚷,配置項(xiàng)也是比較多的,項(xiàng)目中會(huì)設(shè)置到很多的實(shí)際業(yè)務(wù)場(chǎng)景掂铐,需要根據(jù)硬件信息進(jìn)行適當(dāng)?shù)呐渲煤狈鳎R?guī)情況下,使用默認(rèn)配置即可
http {
##
# 基礎(chǔ)配置
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# 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;
##
# 日志配置
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip 壓縮配置
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# 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;
##
# 虛擬主機(jī)配置
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
- 基礎(chǔ)配置
- sendfile on:配置on讓sendfile發(fā)揮作用全陨,將文件的回寫過程交給數(shù)據(jù)緩沖去去完成爆班,而不是放在應(yīng)用中完成,這樣的話在性能提升有有好處
- tc_nopush on:讓nginx在一個(gè)數(shù)據(jù)包中發(fā)送所有的頭文件辱姨,而不是一個(gè)一個(gè)單獨(dú)發(fā)
- tcp_nodelay on:讓nginx不要緩存數(shù)據(jù)柿菩,而是一段一段發(fā)送,如果數(shù)據(jù)的傳輸有實(shí)時(shí)性的要求的話可以配置它雨涛,發(fā)送完一小段數(shù)據(jù)就立刻能得到返回值枢舶,但是不要濫用哦
- keepalive_timeout 10:給客戶端分配連接超時(shí)時(shí)間,服務(wù)器會(huì)在這個(gè)時(shí)間過后關(guān)閉連接替久。一般設(shè)置時(shí)間較短凉泄,可以讓nginx工作持續(xù)性更好
- client_header_timeout 10:設(shè)置請(qǐng)求頭的超時(shí)時(shí)間
- client_body_timeout 10:設(shè)置請(qǐng)求體的超時(shí)時(shí)間
- send_timeout 10:指定客戶端響應(yīng)超時(shí)時(shí)間,如果客戶端兩次操作間隔超過這個(gè)時(shí)間蚯根,服務(wù)器就會(huì)關(guān)閉這個(gè)鏈接
- limit_conn_zone $binary_remote_addr zone=addr:5m :設(shè)置用于保存各種key的共享內(nèi)存的參數(shù)后众,
- limit_conn addr 100: 給定的key設(shè)置最大連接數(shù)
- server_tokens:雖然不會(huì)讓nginx執(zhí)行速度更快,但是可以在錯(cuò)誤頁(yè)面關(guān)閉nginx版本提示稼锅,對(duì)于網(wǎng)站安全性的提升有好處哦
- include /etc/nginx/mime.types:指定在當(dāng)前文件中包含另一個(gè)文件的指令
- default_type application/octet-stream:指定默認(rèn)處理的文件類型可以是二進(jìn)制
- type_hash_max_size 2048:混淆數(shù)據(jù)吼具,影響三列沖突率,值越大消耗內(nèi)存越多矩距,散列key沖突率會(huì)降低,檢索速度更快怖竭;值越小key锥债,占用內(nèi)存較少,沖突率越高痊臭,檢索速度變慢
- 日志配置
- access_log logs/access.log:設(shè)置存儲(chǔ)訪問記錄的日志
- error_log logs/error.log:設(shè)置存儲(chǔ)記錄錯(cuò)誤發(fā)生的日志
- SSL證書加密
- ssl_protocols:指令用于啟動(dòng)特定的加密協(xié)議哮肚,nginx在1.1.13和1.0.12版本后默認(rèn)是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1與TLSv1.2要確保OpenSSL >= 1.0.1 广匙,SSLv3 現(xiàn)在還有很多地方在用但有不少被攻擊的漏洞允趟。
- ssl prefer server ciphers:設(shè)置協(xié)商加密算法時(shí),優(yōu)先使用我們服務(wù)端的加密套件鸦致,而不是客戶端瀏覽器的加密套件
- 壓縮配置
- gzip 是告訴nginx采用gzip壓縮的形式發(fā)送數(shù)據(jù)潮剪。這將會(huì)減少我們發(fā)送的數(shù)據(jù)量涣楷。
- gzip_disable 為指定的客戶端禁用gzip功能。我們?cè)O(shè)置成IE6或者更低版本以使我們的方案能夠廣泛兼容抗碰。
- gzip_static 告訴nginx在壓縮資源之前狮斗,先查找是否有預(yù)先gzip處理過的資源。這要求你預(yù)先壓縮你的文件(在這個(gè)例子中被注釋掉了)弧蝇,從而允許你使用最高壓縮比碳褒,這樣nginx就不用再壓縮這些文件了(想要更詳盡的gzip_static的信息,請(qǐng)點(diǎn)擊這里)看疗。
- gzip_proxied 允許或者禁止壓縮基于請(qǐng)求和響應(yīng)的響應(yīng)流沙峻。我們?cè)O(shè)置為any,意味著將會(huì)壓縮所有的請(qǐng)求两芳。
- gzip_min_length 設(shè)置對(duì)數(shù)據(jù)啟用壓縮的最少字節(jié)數(shù)专酗。如果一個(gè)請(qǐng)求小于1000字節(jié),我們最好不要壓縮它盗扇,因?yàn)閴嚎s這些小的數(shù)據(jù)會(huì)降低處理此請(qǐng)求的所有進(jìn)程的速度祷肯。
- gzip_comp_level 設(shè)置數(shù)據(jù)的壓縮等級(jí)。這個(gè)等級(jí)可以是1-9之間的任意數(shù)值疗隶,9是最慢但是壓縮比最大的佑笋。我們?cè)O(shè)置為4,這是一個(gè)比較折中的設(shè)置斑鼻。
- gzip_type 設(shè)置需要壓縮的數(shù)據(jù)格式蒋纬。上面例子中已經(jīng)有一些了,你也可以再添加更多的格式坚弱。
- 文件緩存配置
- open_file_cache 打開緩存的同時(shí)也指定了緩存最大數(shù)目蜀备,以及緩存的時(shí)間。我們可以設(shè)置一個(gè)相對(duì)高的最大時(shí)間荒叶,這樣我們可以在它們不活動(dòng)超過20秒后清除掉碾阁。
- open_file_cache_valid 在open_file_cache中指定檢測(cè)正確信息的間隔時(shí)間。
- open_file_cache_min_uses 定義了open_file_cache中指令參數(shù)不活動(dòng)時(shí)間期間里最小的文件數(shù)些楣。
- open_file_cache_errors 指定了當(dāng)搜索一個(gè)文件時(shí)是否緩存錯(cuò)誤信息脂凶,也包括再次給配置中添加文件。我們也包括了服務(wù)器模塊愁茁,這些是在不同文件中定義的蚕钦。如果你的服務(wù)器模塊不在這些位置,你就得修改這一行來指定正確的位置鹅很。
server模塊
- srever模塊配置是http模塊中的一個(gè)子模塊嘶居,用來定義一個(gè)虛擬訪問主機(jī),也就是一個(gè)虛擬服務(wù)器的配置信息
server {
listen 80;
server_name localhost 192.168.1.100;
root /nginx/www;
index index.php index.html index.html;
charset utf-8;
access_log logs/access.log;
error_log logs/error.log;
......
}
- 核心配置信息如下:
- server:一個(gè)虛擬主機(jī)的配置促煮,一個(gè)http中可以配置多個(gè)server
- server_name:用力啊指定ip地址或者域名邮屁,多個(gè)配置之間用空格分隔
- root:表示整個(gè)server虛擬主機(jī)內(nèi)的根目錄整袁,所有當(dāng)前主機(jī)中web項(xiàng)目的根目錄
- index:用戶訪問web網(wǎng)站時(shí)的全局首頁(yè)
- charset:用于設(shè)置www/路徑中配置的網(wǎng)頁(yè)的默認(rèn)編碼格式
- access_log:用于指定該虛擬主機(jī)服務(wù)器中的訪問記錄日志存放路徑
- error_log:用于指定該虛擬主機(jī)服務(wù)器中訪問錯(cuò)誤日志的存放路徑
location模塊
location模塊是nginx配置中出現(xiàn)最多的一個(gè)配置,主要用于配置路由訪問信息
在路由訪問信息配置中關(guān)聯(lián)到反向代理樱报、負(fù)載均衡等等各項(xiàng)功能葬项,所以location模塊也是一個(gè)非常重要的配置模塊
- 基本配置
location / {
root /nginx/www;
index index.php index.html index.htm;
}
- location /:表示匹配訪問根目錄
- root:用于指定訪問根目錄時(shí),訪問虛擬主機(jī)的web目錄
- index:在不指定訪問具體資源時(shí)迹蛤,默認(rèn)展示的資源文件列表
- 反向代理配置方式
通過反向代理代理服務(wù)器訪問模式民珍,通過proxy_set配置讓客戶端訪問透明化
location / {
proxy_pass http://localhost:8888;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header Host $http_host;
}
uwsgi配置
- wsgi模式下的服務(wù)器配置訪問方式
location / {
include uwsgi_params;
uwsgi_pass localhost:8888
}
upstream模塊
upstream模塊主要負(fù)責(zé)負(fù)載均衡的配置,通過默認(rèn)的輪詢調(diào)度方式來分發(fā)請(qǐng)求到后端服務(wù)器
- 簡(jiǎn)單的配置方式如下
upstream name {
ip_hash;
server 192.168.1.100:8000;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
- 核心配置信息如下
- ip_hash:指定請(qǐng)求調(diào)度算法盗飒,默認(rèn)是weight權(quán)重輪詢調(diào)度嚷量,可以指定
- server host:port:分發(fā)服務(wù)器的列表配置
- -- down:表示該主機(jī)暫停服務(wù)
- -- max_fails:表示失敗最大次數(shù),超過失敗最大次數(shù)暫停服務(wù)
- -- fail_timeout:表示如果請(qǐng)求受理失敗逆趣,暫停指定的時(shí)間之后重新發(fā)起請(qǐng)求
轉(zhuǎn)載參考:
原文鏈接:https://www.cnblogs.com/taiyonghai/p/9402734.html
原文鏈接:https://blog.csdn.net/qq_42030417/java/article/details/83185809