Nginx簡介及配置詳解(一)


 Nginx是一款開源的、跨平台的高性能web服務器,它有着高性能,穩定性高,配置簡單,模塊結構化,資源消耗低的優點。同時支持反向代理、負載均衡、緩存的功能。其采用多進程+epoll(IO多路復用)模型,也對互聯網高並發連接業務有着很好的支持。

下圖是一個簡單nginx架構:

            

基本命令:

  •  啟動nginx: nginx
  • 以特定目錄下的配置文件啟動:nginx -c  /特定目錄/nginx.conf
  • 重新加載配置:nginx -s reload 執行這個命令后,master進程會等待worker進程處理完當前請求,然后根據最新配置重新創建新的worker進程,完成Nginx配置的熱更新。
  • 立即停止服務: nginx -s stop
  • 從容停止服務: nginx -s quit  執行該命令后,Nginx在完成當前工作任務后再停止。
  • 檢查配置文件是否正確 : nginx -t
  • 檢查特定目錄的配置文件是否正確: nginx -t -c /特定目錄/nginx.conf
  • 查看版本信息: nginx -v

配置文件:

main
events { ... }
http{
   server{
        location  { ... }
    }
}

Nginx默認的配置文件主要有 main、events、http、server、location 五個塊組成。其中 http 、server、location 屬於嵌套關系。

  • main:主要控制Nginx子進程所屬的用戶和用戶組、派生子進程數、錯誤日志位置與級別、pid位置、子進程優先級、進程對應cpu、進程能夠打開的文件描述符數目等。
  • events:控制Nginx處理連接的方式。
  • http:Nginx處理http請求的主要配置塊。
  • server:Nginx中主機配置塊,可用於配置多個虛擬主機。
  • location:server中對應目錄級別的控制塊,可以有多個。
#運行用戶
user nobody;
#工作進程數
worker_processes  1;
#全局錯誤日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
#工作模式及連接數上限
events {
    #epoll是多路復用IO(I/O Multiplexing)中的一種方式,
    #僅用於linux2.6以上內核,可以大大提高nginx的性能
    use   epoll; 
    #單個后台worker process進程的最大並發鏈接數    
    worker_connections  1024;
}
http {
    #設定mime類型,類型由mime.type文件定義
    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 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,
    #對於普通應用,必須設為 on,
    #如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,
    #以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
    sendfile     on;
    #tcp_nopush     on;
    #連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;
    #開啟gzip壓縮
    gzip  on;
    gzip_disable "MSIE [1-6].";
    #設定請求緩沖
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;
    #設定虛擬主機配置
    server {
        #偵聽80端口
        listen    80;
        #定義使用 www.nginx.cn訪問
        server_name  www.nginx.cn;
        #定義服務器的默認網站根目錄位置
        root html;
        #設定本虛擬主機的訪問日志
        access_log  logs/nginx.access.log  main;
        #默認請求
        location / {
            #定義首頁索引文件的名稱
            index index.php index.html index.htm;   
        }
        # 定義錯誤提示頁面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }
        #靜態文件,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            #過期30天,靜態文件不怎么更新,過期可以設大一點,
            #如果頻繁更新,則可以設置得小一點。
            expires 30d;
        }
        #PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
        #禁止訪問 .htxxx 文件
            location ~ /.ht {
            deny all;
        }
    }
}
View Code

其中location根據不同前綴的使用方式,大致分為普通location和正則location。多個正則location之間會按照先后順序進行匹配,匹配成功后,就不會繼續匹配后面定義的location。多個普通location之間遵循“最大匹配原則”,匹配度最高的location將會被執行,同時也可以利用 =精准匹配和 ^~非正則匹配可以在正則匹配之前優先匹配,禁止執行原有的正則匹配。因此 當多種類型的 location 匹配同時出現時,最終執行結果為“= ”匹配優先於"^~"匹配,“^~”匹配優先於正則匹配,正則匹配優先於普通的最大前綴匹配 只要優先的location 匹配成功,就不會執行其他的location 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM