常用配置文件之Nginx篇

為何會(huì)有此篇文章

平時(shí)不怎么搭建服務(wù)器環(huán)境,等真的要用的時(shí)候又忙的焦頭爛額,所以把我自己常用的配置文件留存在這里,并且附帶一些中文注釋,方便自己和他人查閱。

Nginx配置文件結(jié)構(gòu)

這張圖相信大家一定在不少地方都看過(guò)。

nginx配置文件結(jié)構(gòu).png

配置文件詳解

參考了別人的配置文件和我自己的配置文件。

#定義Nginx運(yùn)行的用戶和用戶組,像ubuntu16.04默認(rèn)配置文件里填的就是www-data,不填默認(rèn)是nobody.
user www-data www-data;

#Nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù)。
worker_processes auto;

#全局錯(cuò)誤日志定義類(lèi)型,多個(gè)等級(jí)可并存,[ debug | info | notice | warn | error | crit ],從左到右錯(cuò)誤信息越來(lái)越少;
#此指令可以在全局、http、server、location塊中配置)
error_log /var/log/nginx/error.log notice;
access_log /var/log/nginx/error.log;

#儲(chǔ)存Nginx進(jìn)程id的文件路徑
pid /var/run/nginx.pid;

#一個(gè)Nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開(kāi)文件數(shù)(系統(tǒng)的值ulimit -n)
#一般Nginx的錯(cuò)誤日志里面看到 “too many open files”,可能就要調(diào)整這個(gè)詞
worker_rlimit_nofile 65535;

#工作模式與連接數(shù)上限
events
{
    #參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 
    #epoll模型是Linux 2.6以上版本內(nèi)核中的高性能網(wǎng)絡(luò)I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    #一般不填就是默認(rèn)的
    use epoll;
    #單個(gè)進(jìn)程最大連接數(shù),簡(jiǎn)單公式max_clients = work_processes x worker_connections
    worker_connections 52100;
}

#設(shè)定http服務(wù)器
http
{  
    #文件擴(kuò)展名與文件類(lèi)型映射表,比如ubuntu16.04就在/etc/nginx/mime.types
    include mime.types; 
    #默認(rèn)文件類(lèi)型
    default_type   application/octet-stream
    #默認(rèn)編碼,建議帶上,避免一些奇怪的問(wèn)題
    charset utf-8;
    #客戶端請(qǐng)求頭的buffersize的大小,調(diào)整客戶端上傳文件大小是另一個(gè)參數(shù),別搞混淆了
    client_header_buffer_size 32k; 
    #客戶端請(qǐng)求中較大的消息頭的緩存的數(shù)量和大小,這里的4是數(shù)量,32k是大小
    large_client_header_buffers 4 32k;
    #客戶端請(qǐng)求中http的body的大小,一般理解為請(qǐng)求文件大小,如果你的php和php-fpm設(shè)置了上傳
    #文件大小的限制,記得nginx里面也要改成相應(yīng)的,不然會(huì)出現(xiàn) 客戶端文件無(wú)法上傳的問(wèn)題。
    client_max_body_size 8m; 
    #設(shè)置on表示高效傳輸文件的模式,一般網(wǎng)站建議開(kāi)啟。
    sendfile on;
    #開(kāi)啟目錄列表訪問(wèn),合適下載服務(wù)器,默認(rèn)關(guān)閉。
    #autoindex on; 
    #關(guān)閉服務(wù)器版本號(hào)顯示,一般生產(chǎn)環(huán)境還是建議關(guān)閉,避免被其他人知道了nginx的版本而查到相關(guān)漏洞
    server_tokens off; 。
    #一般在sendfile開(kāi)啟的時(shí)候才起作用,主要是用來(lái)防止網(wǎng)絡(luò)堵塞
    tcp_nopush on; 
    tcp_nodelay on; 
    #設(shè)置客戶端保持活動(dòng)連接的時(shí)間,超過(guò)這個(gè)時(shí)間,服務(wù)器會(huì)關(guān)閉連接,可以根據(jù)你的php-fpm的超時(shí)時(shí)間
    #來(lái)設(shè)置這個(gè)
    keepalive_timeout 65;

    #gzip模塊設(shè)置
    #開(kāi)啟gzip壓縮輸出
    gzip on; 
    #最小壓縮文件大小
    gzip_min_length 1k;
    #gzip的緩存區(qū)的數(shù)量和大小,默認(rèn)是申請(qǐng)和Content-Length中一樣大小的緩沖區(qū)
    gzip_buffers 4 16k;
    #支持的http的協(xié)議版本,可以選1.0和1.1,一般瀏覽器都支持了,可以不填這個(gè)選項(xiàng)也行
    gzip_http_version 1.0;
    #壓縮等級(jí),取值是1-9,越高速度越慢越消耗cpu資源,不建議開(kāi)太高,一般2就夠了
    gzip_comp_level 2; 
    #壓縮類(lèi)型,默認(rèn)就已經(jīng)包含text/html,所以下面就不用再寫(xiě)了,寫(xiě)了會(huì)有warn。
    gzip_types text/plain Application/x-javascript text/css Application/xml;
    #是否讓前端的緩存服務(wù)器緩存壓縮后的gzip文件
    gzip_vary on;
    #包含/etc/nginx/conf.d下面的所有后綴為.conf的配置文件
    #可以根據(jù)業(yè)務(wù)也可以根據(jù)域名來(lái)合理分配你的配置文件    
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    #upstream的負(fù)載均衡,weight是權(quán)重,可以根據(jù)機(jī)器配置定義權(quán)重。weigth參數(shù)表示權(quán)值,權(quán)值越高被分
    #配到的幾率越大,也有別的方式,不過(guò)最常用的就是這一種,可以在后面的配置中調(diào)用。
    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配置,一般一個(gè)對(duì)應(yīng)一個(gè)域名
    server
    {
        #監(jiān)聽(tīng)端口
        listen 80;
        #域名可以有多個(gè),用空格隔開(kāi)
        server_name localhost www.ilovenginx.com;
        #默認(rèn)的首頁(yè)文件,注意一下順序,尤其是如果你是php應(yīng)用,碰巧有index.html頁(yè)面的時(shí)候要注意下
        index index.html index.htm index.php;
        #網(wǎng)站的根目錄
        root /var/www/test;
       
        #location 支持正則表達(dá)式和條件判斷匹配,可以針對(duì)動(dòng)靜態(tài)網(wǎng)頁(yè)做一些過(guò)濾處理
        #比如對(duì)php后綴的處理
        location ~ .*\.(php|php5)?$
        {   
            #這里也是可以設(shè)置更目錄路徑的
            root /var/data/test/php
            #可以是端口也可以是socket,看你PHP的配置,一般sock性能稍微好點(diǎn)
            #fastcgi_pass unix:/tmp/php-cgi.sock;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            #好多人少這一條,或者路徑不對(duì)就GG了,以后詳細(xì)說(shuō)明
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi.conf;
        }
        
        #這個(gè)是設(shè)置圖片或者flash在HTTP應(yīng)答里面Expires和Cache-Control的HTTP頭,以達(dá)到在瀏覽器中
        #緩存圖片和flash的作用,這里緩存了30天
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires 30d;
        }
        #定義錯(cuò)誤提示頁(yè)面
        error_page   500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

    #一個(gè)https網(wǎng)站的配置
    server
    {
        #監(jiān)聽(tīng)端口
        listen 443;
        #域名可以有多個(gè),用空格隔開(kāi)
        server_name localhost www.ilovenginx.com;
        #默認(rèn)的首頁(yè)文件,注意一下順序,尤其是如果你是php應(yīng)用,碰巧有index.html頁(yè)面的時(shí)候要注意下
        index index.html index.htm index.php;
        #網(wǎng)站的根目錄
        root /var/www/test;
        
        #打開(kāi)ssl
        ssl on;
        #證書(shū)和key,怎么生成的自己查資料去,位置就填你放證書(shū)的位置
        ssl_certificate /usr/local/nginx/conf/local.crt;
        ssl_certificate_key /user/local/nginx/local_nopwd.key;
    }
    
    #一個(gè)ruby應(yīng)用的例子
    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應(yīng)用和iOS應(yīng)用的擴(kuò)展名。如果瀏覽器下載Nginx服務(wù)器中的后綴名為.apk和.ipa的文件時(shí),瀏覽器會(huì)自動(dòng)命名為zip文件。
如果需要下載文件名后綴就是.apk或者.ipa,可以修改Nginx.conf目錄下的mime.types文件,在文件中增加兩行。

application/vnd.android.package-archive apk;
application/iphone pxl ipa;

重啟nginx就能生效了。

結(jié)語(yǔ)

  1. 生產(chǎn)環(huán)境中修改配置文件,務(wù)必要養(yǎng)成先備份配置文件的習(xí)慣。
  2. 如果修改文件后需要重啟nginx,一定要記得先用nginx -t參數(shù)檢查你的配置文件語(yǔ)法是否正確。我也有經(jīng)歷過(guò)沒(méi)檢查配置文件,導(dǎo)致nginx重啟的過(guò)程中nginx停止服務(wù),影響網(wǎng)站的正常運(yùn)行的。
  3. 使用nginx -s reload 平滑重啟nginx。
  4. 線上服務(wù)器要重視用戶的體驗(yàn),所有的操作謹(jǐn)慎一些沒(méi)有錯(cuò)。

參考來(lái)源

《App后臺(tái)開(kāi)發(fā)運(yùn)維和架構(gòu)實(shí)現(xiàn)》曾健生 編著
《Nginx配置文件(nginx.conf)詳解》 技術(shù)學(xué)習(xí) 簡(jiǎn)書(shū)發(fā)布

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容