為何會有此篇文章
平時不怎么搭建服務器環(huán)境为严,等真的要用的時候又忙的焦頭爛額逛漫,所以把我自己常用的配置文件留存在這里,并且附帶一些中文注釋锤灿,方便自己和他人查閱挽拔。
Nginx配置文件結構
這張圖相信大家一定在不少地方都看過。
配置文件詳解
參考了別人的配置文件和我自己的配置文件但校。
#定義Nginx運行的用戶和用戶組螃诅,像ubuntu16.04默認配置文件里填的就是www-data,不填默認是nobody.
user www-data www-data;
#Nginx進程數(shù)状囱,建議設置為等于CPU總核心數(shù)术裸。
worker_processes auto;
#全局錯誤日志定義類型,多個等級可并存亭枷,[ debug | info | notice | warn | error | crit ]袭艺,從左到右錯誤信息越來越少;
#此指令可以在全局叨粘、http猾编、server、location塊中配置)
error_log /var/log/nginx/error.log notice;
access_log /var/log/nginx/error.log;
#儲存Nginx進程id的文件路徑
pid /var/run/nginx.pid;
#一個Nginx進程打開的最多文件描述符數(shù)目升敲,理論值應該是最多打開文件數(shù)(系統(tǒng)的值ulimit -n)
#一般Nginx的錯誤日志里面看到 “too many open files”,可能就要調整這個詞
worker_rlimit_nofile 65535;
#工作模式與連接數(shù)上限
events
{
#參考事件模型答倡,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
#epoll模型是Linux 2.6以上版本內核中的高性能網(wǎng)絡I/O模型,如果跑在FreeBSD上面驴党,就用kqueue模型瘪撇。
#一般不填就是默認的
use epoll;
#單個進程最大連接數(shù),簡單公式max_clients = work_processes x worker_connections
worker_connections 52100;
}
#設定http服務器
http
{
#文件擴展名與文件類型映射表,比如ubuntu16.04就在/etc/nginx/mime.types
include mime.types;
#默認文件類型
default_type application/octet-stream
#默認編碼,建議帶上鼻弧,避免一些奇怪的問題
charset utf-8;
#客戶端請求頭的buffersize的大小设江,調整客戶端上傳文件大小是另一個參數(shù),別搞混淆了
client_header_buffer_size 32k;
#客戶端請求中較大的消息頭的緩存的數(shù)量和大小攘轩,這里的4是數(shù)量儿捧,32k是大小
large_client_header_buffers 4 32k;
#客戶端請求中http的body的大小,一般理解為請求文件大小纵东,如果你的php和php-fpm設置了上傳
#文件大小的限制定鸟,記得nginx里面也要改成相應的稿存,不然會出現(xiàn) 客戶端文件無法上傳的問題。
client_max_body_size 8m;
#設置on表示高效傳輸文件的模式瞳秽,一般網(wǎng)站建議開啟瓣履。
sendfile on;
#開啟目錄列表訪問,合適下載服務器练俐,默認關閉袖迎。
#autoindex on;
#關閉服務器版本號顯示,一般生產環(huán)境還是建議關閉,避免被其他人知道了nginx的版本而查到相關漏洞
server_tokens off; 腺晾。
#一般在sendfile開啟的時候才起作用燕锥,主要是用來防止網(wǎng)絡堵塞
tcp_nopush on;
tcp_nodelay on;
#設置客戶端保持活動連接的時間,超過這個時間悯蝉,服務器會關閉連接归形,可以根據(jù)你的php-fpm的超時時間
#來設置這個
keepalive_timeout 65;
#gzip模塊設置
#開啟gzip壓縮輸出
gzip on;
#最小壓縮文件大小
gzip_min_length 1k;
#gzip的緩存區(qū)的數(shù)量和大小,默認是申請和Content-Length中一樣大小的緩沖區(qū)
gzip_buffers 4 16k;
#支持的http的協(xié)議版本鼻由,可以選1.0和1.1暇榴,一般瀏覽器都支持了,可以不填這個選項也行
gzip_http_version 1.0;
#壓縮等級蕉世,取值是1-9蔼紧,越高速度越慢越消耗cpu資源,不建議開太高讨彼,一般2就夠了
gzip_comp_level 2;
#壓縮類型歉井,默認就已經包含text/html,所以下面就不用再寫了哈误,寫了會有warn哩至。
gzip_types text/plain Application/x-javascript text/css Application/xml;
#是否讓前端的緩存服務器緩存壓縮后的gzip文件
gzip_vary on;
#包含/etc/nginx/conf.d下面的所有后綴為.conf的配置文件
#可以根據(jù)業(yè)務也可以根據(jù)域名來合理分配你的配置文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
#upstream的負載均衡,weight是權重蜜自,可以根據(jù)機器配置定義權重菩貌。weigth參數(shù)表示權值,權值越高被分
#配到的幾率越大重荠,也有別的方式箭阶,不過最常用的就是這一種,可以在后面的配置中調用戈鲁。
upstream test {
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
}
#常用的server配置仇参,一般一個對應一個域名
server
{
#監(jiān)聽端口
listen 80;
#域名可以有多個,用空格隔開
server_name localhost www.ilovenginx.com;
#默認的首頁文件婆殿,注意一下順序诈乒,尤其是如果你是php應用,碰巧有index.html頁面的時候要注意下
index index.html index.htm index.php;
#網(wǎng)站的根目錄
root /var/www/test;
#location 支持正則表達式和條件判斷匹配婆芦,可以針對動靜態(tài)網(wǎng)頁做一些過濾處理
#比如對php后綴的處理
location ~ .*\.(php|php5)?$
{
#這里也是可以設置更目錄路徑的
root /var/data/test/php
#可以是端口也可以是socket怕磨,看你PHP的配置喂饥,一般sock性能稍微好點
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#好多人少這一條,或者路徑不對就GG了肠鲫,以后詳細說明
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
#這個是設置圖片或者flash在HTTP應答里面Expires和Cache-Control的HTTP頭员帮,以達到在瀏覽器中
#緩存圖片和flash的作用,這里緩存了30天
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
#定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
#一個https網(wǎng)站的配置
server
{
#監(jiān)聽端口
listen 443;
#域名可以有多個导饲,用空格隔開
server_name localhost www.ilovenginx.com;
#默認的首頁文件捞高,注意一下順序,尤其是如果你是php應用帜消,碰巧有index.html頁面的時候要注意下
index index.html index.htm index.php;
#網(wǎng)站的根目錄
root /var/www/test;
#打開ssl
ssl on;
#證書和key棠枉,怎么生成的自己查資料去,位置就填你放證書的位置
ssl_certificate /usr/local/nginx/conf/local.crt;
ssl_certificate_key /user/local/nginx/local_nopwd.key;
}
#一個ruby應用的例子
server
{
listen 80;
server_name localhost;
location /
{
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
}
}
}
下載APP的配置
APK和IPA分本是Android應用和iOS應用的擴展名泡挺。如果瀏覽器下載Nginx服務器中的后綴名為.apk和.ipa的文件時,瀏覽器會自動命名為zip文件命浴。
如果需要下載文件名后綴就是.apk或者.ipa娄猫,可以修改Nginx.conf目錄下的mime.types文件,在文件中增加兩行生闲。
application/vnd.android.package-archive apk;
application/iphone pxl ipa;
重啟nginx就能生效了媳溺。
結語
- 生產環(huán)境中修改配置文件,務必要養(yǎng)成先備份配置文件的習慣碍讯。
- 如果修改文件后需要重啟nginx悬蔽,一定要記得先用nginx -t參數(shù)檢查你的配置文件語法是否正確。我也有經歷過沒檢查配置文件捉兴,導致nginx重啟的過程中nginx停止服務蝎困,影響網(wǎng)站的正常運行的。
- 使用nginx -s reload 平滑重啟nginx倍啥。
- 線上服務器要重視用戶的體驗禾乘,所有的操作謹慎一些沒有錯。
參考來源
《App后臺開發(fā)運維和架構實現(xiàn)》曾健生 編著
《Nginx配置文件(nginx.conf)詳解》 技術學習 簡書發(fā)布