一、點(diǎn)我下載
二澈圈、解壓文件
image.png
在當(dāng)前文件夾下通過終端就可以操作nginx
三绳慎、配置詳解
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
述配置都是存放在main全局配置模塊中的配置項(xiàng)
user用來(lái)指定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用來(lái)指定進(jìn)程id的存儲(chǔ)文件的位置
worker_rlimit_nofile用于指定一個(gè)進(jìn)程可以打開最多文件數(shù)量的描述
events:用于nginx工作模式的配置
events {
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:用于進(jìn)行http協(xié)議信息的一些配置
作為web服務(wù)器,http模塊是nginx最核心的一個(gè)模塊烤蜕,配置項(xiàng)也是比較多的封孙,
項(xiàng)目中會(huì)設(shè)置到很多的實(shí)際業(yè)務(wù)場(chǎng)景,需要根據(jù)硬件信息進(jìn)行適當(dāng)?shù)呐渲茫?常規(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/*;
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)存較少,沖突率越高兔毙,
檢索速度變慢
2) 日志配置
access_log logs/access.log:設(shè)置存儲(chǔ)訪問記錄的日志
error_log logs/error.log:設(shè)置存儲(chǔ)記錄錯(cuò)誤發(fā)生的日志
3) 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ù)端的加密套件,
而不是客戶端瀏覽器的加密套件
4) 壓縮配置
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)有一些了,你也可以再添加
更多的格式蛛淋。
5) 文件緩存配置
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ù)器模塊不在這些位置,你就得修改這一行來(lái)指定正確的位置棠赛。
server:用于進(jìn)行服務(wù)器訪問信息的配置
srever模塊配置是http模塊中的一個(gè)子模塊哮奇,用來(lái)定義一個(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:用于進(jìn)行訪問路由的配置
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)展示的資源文件列表
location /api {
proxy_pass http://www.baidu.com;
#以下是一些反向代理的配置可刪除
proxy_redirect off;
#后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)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;
client_max_body_size 10m; #允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)
client_body_buffer_size 128k; #緩沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)
proxy_connect_timeout 300; #nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
proxy_send_timeout 300; #后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
proxy_read_timeout 300; #連接成功后脯丝,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
proxy_buffer_size 4k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
proxy_buffers 4 32k; #proxy_buffers緩沖區(qū),網(wǎng)頁(yè)平均在32k以下就設(shè)置
proxy_busy_buffers_size 64k; #高負(fù)荷下緩沖大蟹ァ(proxy_buffers*2)
proxy_temp_file_write_size 64k; #設(shè)定緩存文件夾大小宠进,大于這個(gè)值,
將從upstream服務(wù)器傳
}
upstream:用于進(jìn)行負(fù)載均衡的配置
upstream模塊主要負(fù)責(zé)負(fù)載均衡的配置藐翎,
通過默認(rèn)的輪詢調(diào)度方式來(lái)分發(fā)請(qǐng)求到后端服務(wù)器
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)求
四、跨域代理
在http這個(gè)配置項(xiàng)的下面找到server這個(gè)配置項(xiàng)末贾,我們?cè)趕erver中實(shí)現(xiàn)跨域代理
location /demo/ {
root html;
index index.html index.htm;
}
上面這個(gè)配置的意思是 當(dāng)訪問location 下面的/demo 路徑的時(shí)候
找到根文件加(root html),訪問根文件夾下面的index.html
![image.png](https://upload-images.jianshu.io/upload_images/17573670-8a75ac3d34411088.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
五闸溃、nginx基本命令
//強(qiáng)制停止nginx服務(wù)器,如果有未處理的數(shù)據(jù)拱撵,丟棄
nginx -s stop
//停止nginx服務(wù)器辉川,如果有未處理的數(shù)據(jù),等待處理完成之后停止
nginx -s quit
//重啟nginx服務(wù)器
nginx -s reload