nginx使用指南

jopen 10年前發布 | 16K 次閱讀 Web服務器 Nginx

1,運行nginx

可以運行nginx命令開啟nginx:

 nginx 

如果nginx已經開啟了,可以運行nginx命令加-s 參數來控制nginx的運行
nginx -s signal
signal的值:

  • stop — 快速關閉
  • quit — 優雅的關閉
  • reload — 重新加載配置文件
  • reopen — 重新打開日志文件 
  • </ul>

    例如:要等nginx處理完當前的請求后關閉nginx可以用下面的命令

    nginx -s quit

                修改了配置文件后需要運行下面的命令

    nginx -s reload

    2,簡單配置nginx

    打開配置文件,一般在/etc/nginx/nginx.cnf中,依照自己安裝參數而定。

    nginx.conf 中已經包含了一個server塊的配置案例,不過是注釋掉的。下面是一個server塊的基本配置

    http {
        server {
        }
    }

    server塊下面可以配置一些location來指定請求url對應的本地資源

    location / {
        root /data/www;
    }
    上面表示所有的/ 下面的訪問資源都在/data/www 文件夾下面

     

    location /images/ {
        root /data;
    }
    這個表示所有/images/路徑訪問的圖片都在/data下面

     

    那么上面的統一配置就是

    server {

    listen 8080;
    
    location / {        root /data/www;    }    
    
    location /images/ {        root /data;    }
    
    

    }</pre>

    如果我訪問http://localhost/images/example.png的話,nginx就會返回文件目錄中/data/images/下面的example.png圖片返回給客戶端

    如果我訪問http://localhost/some/example.html的話,nginx就會返回文件目錄中/data/www/下面的example.html圖片返回給客戶端

    listen可以不指定,默認是8080

    如果在運行期間修改了配置運行

    nginx -s reload

    如果配置驗證通,但沒有按照約定訪問到指定的文件可以查看/usr/local/nginx/logs 或/var/log/nginx下面的日志文件access.logerror.log

     

    3,配置反向代理

    server {
        location / {
            proxy_pass http://localhost:8080;
        }

    location /images/ {
        root /data;
    }
    

    }</pre>

    proxy_pass指定反向代理的路徑,所有符合/的路徑都會到http://localhost:8080中獲取資源

    如:http://192.168.1.100/some/example.html 訪問的資源 其實是 http://localhost/some/example.html獲取的資源,這些對客戶端是透明的。

     

    4,主機名

    服務器名稱通過server_name指令指定,它決定哪個server來處理哪個請求.server_name 可以通過通配符,正則指定。

    server {
        listen       80;
        server_name  example.org  www.example.org;
        ...
    }

    server { listen 80; server_name *.example.org; ... }

    server { listen 80; server_name mail.*; ... }

    server { listen 80; server_name ~^(?<user>.+).example.net$; ... }</pre>當一個請求同時滿足多個主機名的時候優先選擇的主機名有如下順序。

    1,全名稱,準確的名稱。

    2,最長的通過*開頭的通配符名稱“*.example.org

    3,最長的通過*結尾的通配符名稱“mail.*

    4,第一個匹配正則表達式的虛擬主機名

    通配符只能在主機名的開始和結束使用,“www.*.example.org”和“w*.example.org” 都是錯誤的寫法,如果需要匹配這種模式可以通過正則表達式指定,如“~^www\..+\.example\.org$” and“~^w.*\.example\.org$”。星號代理主機名的一部分“*.example.org”不僅代表www.example.com還代表www.sub.example.com.example.org既可以代表example.org也可以代表*.example.org。

    如果要使用正則表達式,主機名必須以波浪符~開始

    server_name  ~^www\d+\.example\.net$;
    如果不是以波浪符號~還是,那么它被認為是一個全主機名。

    如果正則表達式主機名中包含*,那么它被認為是一個通配符主機名。^和$是必需的,他們是語法和邏輯上的要求。

    通過正則捕獲可以再后面的變量中引用

    server {
        server_name   ~^(www.)?(?<domain>.+)$;

    location / {
        root   /sites/<strong>$domain</strong>;
    }
    

    }</pre>正則表達捕獲可以支持如下的語法

    </tr>

    </tr>

    </tr> </tbody> </table> 正則捕獲也可以通過數字參數獲取
    server {
        server_name   ~^(www.)?(.+)$;

    location / {
        root   /sites/<strong>$2</strong>;
    }
    

    }</pre>$2匹配第二個括號中的正則表達式匹配的內容。

    混合主機名

    server {
        listen       80;
        server_name  example.org  www.example.org  "";
        ...
    }
    如果nginx沒有可以匹配請求的url主機名的server模塊,則默認返回空的主機名來響應請求。

    如果用戶通過ip訪問,這server_name可以配置ip主機名來響應請求

    server {
        listen       80;
        server_name  example.org
                     www.example.org
                     ""
                     192.168.1.1                  ;
        ...
    }
    -表示的主機名代表了所有錯誤的主機名
    server {
        listen       80  default_server;
        server_name  _;
        return       444;
    }

    在有些時候你可能會訪問*.example.com 但其中包好 www.example.com和example.com 且這兩個訪問跟頻繁,最好配置成這樣

    server {
        listen       80;
        server_name  example.org  www.example.org  *.example.org;
        ...
    }
    而不要是這樣
    server {
        listen       80;
        server_name  .example.org;
        ...
    }

    如果主機名過長需要在http模塊中修改參數

    server_names_hash_bucket_size
    這個參數的值可以使32或64,取決于你的cpu緩存棧的大小

    如果你將他設為32,但你的服務器名稱很長如:too.long.server.name.example.org,那么它會報錯

    could not build the server_names_hash,
    you should increase server_names_hash_bucket_size: 32
    你必須要把它的參數設成兩倍


    http {
        server_names_hash_bucket_size  64;
        ...

    如果配置的主機名過多就會報這個錯

    could not build the server_names_hash,
    you should increase either server_names_hash_max_size: 512
    or server_names_hash_bucket_size: 32
    解決方法是盡可能地將server_names_hash_max_size設置的和主機名的個數一樣,如果這個配置起不了做用,或配置后導致nginx的啟動時間過長的話,就增加server_names_hash_bucket_size的值。

    來自:http://blog.csdn.net/ilovezhangxian/article/details/38495631

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
    ?<name> Perl 5.10 compatible syntax, supported since PCRE-7.0
    ?'name' Perl 5.10 compatible syntax, supported since PCRE-7.0
    ?P<name> Python compatible syntax, supported since PCRE-4.0
sesese色