鍍金池/ 教程/ Linux/ Nginx快速入門
Nginx安裝
Nginx內(nèi)容緩存
Nginx架構(gòu)
Nginx進(jìn)程和運(yùn)行時(shí)控制
Nginx配置虛擬機(jī)
Nginx從源碼構(gòu)建安裝配置
為什么需要Nginx?
Nginx配置文件
Nginx壓縮和解壓
Nginx+PHP7+MySQL5.7(LNMP)環(huán)境配置
Nginx反向代理
Nginx+PHP7源碼安裝配置
Nginx快速入門
Nginx的優(yōu)勢(shì)(優(yōu)點(diǎn))
Nginx教程
Nginx特性
Nginx配置Web服務(wù)器
Nginx配置日志
Nginx配置靜態(tài)內(nèi)容服務(wù)器
Nginx主要應(yīng)用場(chǎng)景(必讀)
Nginx安裝(從Linx包安裝)

Nginx快速入門

本文主要介紹nginx的基本配置和操作,并介紹了一些可以完成的簡(jiǎn)單任務(wù)。假設(shè)您已經(jīng)學(xué)習(xí)過并已經(jīng)安裝好了nginx服務(wù)器。 如果沒有,請(qǐng)參閱安裝nginx頁(yè)面(http://www.yiibai.com/nginx/nginx-install.html )。 本指南介紹如何啟動(dòng)和停止nginx,并重新加載其配置,解釋配置文件的結(jié)構(gòu),并介紹如何設(shè)置nginx以提供靜態(tài)內(nèi)容,如何配置nginx作為代理服務(wù)器,以及如何將其連接到 一個(gè)FastCGI應(yīng)用程序。

nginx有一個(gè)主進(jìn)程和幾個(gè)工作進(jìn)程。 主進(jìn)程的主要目的是讀取和評(píng)估配置,并維護(hù)工作進(jìn)程。 工作進(jìn)程對(duì)請(qǐng)求進(jìn)行實(shí)際處理。 nginx采用基于事件的模型和依賴于操作系統(tǒng)的機(jī)制來有效地在工作進(jìn)程之間分配請(qǐng)求。 工作進(jìn)程的數(shù)量可在配置文件中定義,并且可以針對(duì)給定的配置進(jìn)行修改,或者自動(dòng)調(diào)整到可用CPU內(nèi)核的數(shù)量(請(qǐng)參閱worker_processes)。

在配置文件中確定nginx及其模塊的工作方式。 默認(rèn)情況下,配置文件名為nginx.conf,并放在目錄:/usr/local/nginx/conf, /etc/nginx, 或 /usr/local/etc/nginx 中。

在前面安裝文章配置中,使用的安裝配置目錄是:/usr/local/nginx/conf 。所以可以在這個(gè)目錄下找到這個(gè)配置文件。

1. 啟動(dòng),停止和重新加載Nginx配置

要啟動(dòng)nginx,請(qǐng)運(yùn)行可執(zhí)行文件。 當(dāng)nginx啟動(dòng)后,可以通過使用-s參數(shù)調(diào)用可執(zhí)行文件來控制它。 使用以下語(yǔ)法:

nginx -s signal

信號(hào)(signal)的值可能是以下之一:

  • stop - 快速關(guān)閉服務(wù)
  • quit - 正常關(guān)閉服務(wù)
  • reload - 重新加載配置文件
  • reopen - 重新打開日志文件

例如,要通過等待工作進(jìn)程完成服務(wù)當(dāng)前請(qǐng)求來停止nginx進(jìn)程,可以執(zhí)行以下命令:

nginx -s quit

注:該命令應(yīng)該在啟動(dòng)nginx的同一用戶下執(zhí)行。

在將重新配置命令的命令發(fā)送到nginx或重新啟動(dòng)之前,配置文件中的更改將不會(huì)被應(yīng)用。 要重新加載配置文件,請(qǐng)執(zhí)行:

nginx -s reload

當(dāng)主進(jìn)程收到要重新加載配置的信號(hào),它將檢查新配置文件的語(yǔ)法有效性,并嘗試應(yīng)用其中提供的配置。 如果這是成功的,主進(jìn)程將啟動(dòng)新的工作進(jìn)程,并向舊的工作進(jìn)程發(fā)送消息,請(qǐng)求它們關(guān)閉。 否則,主進(jìn)程回滾更改,并繼續(xù)使用舊配置。 老工作進(jìn)程,接收關(guān)閉命令,停止接受新連接,并繼續(xù)維護(hù)當(dāng)前請(qǐng)求,直到所有這些請(qǐng)求得到維護(hù)。 之后,舊的工作進(jìn)程退出。

還可以借助Unix工具(如kill utility)將信號(hào)發(fā)送到nginx進(jìn)程。 在這種情況下,信號(hào)直接發(fā)送到具有給定進(jìn)程ID的進(jìn)程。 默認(rèn)情況下,nginx主進(jìn)程的進(jìn)程ID寫入目錄/usr/local/nginx/logs/var/run中的nginx.pid。 例如,如果主進(jìn)程ID為1628,則發(fā)送QUIT信號(hào)導(dǎo)致nginx的正常關(guān)閉,請(qǐng)執(zhí)行:

kill -s QUIT 1628

要獲取所有運(yùn)行的nginx進(jìn)程的列表,可以使用ps命令,例如,以下列方式:

ps -ax | grep nginx

2. 配置文件的結(jié)構(gòu)

nginx由配置文件中指定的指令控制的模塊組成。 指令分為簡(jiǎn)單指令和塊指令。 一個(gè)簡(jiǎn)單的指令由空格分隔的名稱和參數(shù)組成,并以分號(hào)(;)結(jié)尾。 塊指令具有與簡(jiǎn)單指令相同的結(jié)構(gòu),但不是以分號(hào)結(jié)尾,而是以大括號(hào)({})包圍的一組附加指令結(jié)束。 如果塊指令可以在大括號(hào)內(nèi)部有其他指令,則稱為上下文(例如:events,http,serverlocation)。

配置文件中放置在任何上下文之外的偽指令都被認(rèn)為是主上下文。 eventshttp指令駐留在主上下文中,serverhttp中的,而locationhttp塊中。

#號(hào)之后的一行的部分被視為注釋。

3. 提供靜態(tài)內(nèi)容服務(wù)(靜態(tài)網(wǎng)站)

一個(gè)重要的Web服務(wù)器任務(wù)是提供文件(如圖像或靜態(tài)HTML頁(yè)面)。這里我們來學(xué)習(xí)如何實(shí)現(xiàn)一個(gè)示例,根據(jù)請(qǐng)求,文件將從不同的本地目錄提供:/data/www(可能包含HTML文件)和/ data/images(包含圖像)。這將需要編輯配置文件,并使用兩個(gè)位置塊在http塊內(nèi)設(shè)置服務(wù)器塊。

首先,創(chuàng)建/data/www目錄,并將一個(gè)包含任何文本內(nèi)容的index.html文件放入其中,并創(chuàng)建/data/images目錄并在其中放置一些圖像。創(chuàng)建兩個(gè)目錄 -

[root@localhost ~]# mkdir -p /data/www
[root@localhost ~]# mkdir -p /data/images
[root@localhost ~]#

分別在上面創(chuàng)建的兩個(gè)目錄中放入兩個(gè)文件:/data/www/index.html/data/images/logo.png,/data/www/index.html文件的內(nèi)容就一行,如下 -

<h2> New Static WebSite Demo.</h2>

接下來,打開配置文件(/usr/local/nginx/conf/nginx.conf)。 默認(rèn)的配置文件已經(jīng)包含了服務(wù)器塊的幾個(gè)示例,大部分是注釋掉的。 現(xiàn)在注釋掉所有這樣的塊,并啟動(dòng)一個(gè)新的服務(wù)器塊:

http {
    server {
    }
}

通常,配置文件可以包括服務(wù)器監(jiān)聽的端口和服務(wù)器名稱區(qū)分的幾個(gè)server塊。當(dāng)nginx決定哪個(gè)服務(wù)器處理請(qǐng)求后,它會(huì)根據(jù)服務(wù)器塊內(nèi)部定義的location指令的參數(shù)測(cè)試請(qǐng)求頭中指定的URI。

將以下location塊添加到服務(wù)器(server)塊:

http {
    server {
        location / {
            root /data/www;
        }
    }
}

location塊指定與請(qǐng)求中的URI相比較的“/”前綴。 對(duì)于匹配請(qǐng)求,URI將被添加到root指令中指定的路徑(即/data/www),以形成本地文件系統(tǒng)上所請(qǐng)求文件的路徑。 如果有幾個(gè)匹配的location塊,nginx將選擇具有最長(zhǎng)前綴來匹配location塊。 上面的location塊提供最短的前綴長(zhǎng)度為1,因此只有當(dāng)所有其他location塊不能提供匹配時(shí),才會(huì)使用該塊。

接下來,添加第二個(gè)location塊:

http {
    server {
        location / {
            root /data/www;
        }
        location /images/ {
            root /data;
        }
    }
}

它將是以/images/(位置/也匹配這樣的請(qǐng)求,但具有較短前綴,也就是“/images/”比“/”長(zhǎng))的請(qǐng)求來匹配。

server塊的最終配置應(yīng)如下所示:

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

這已經(jīng)是一個(gè)在標(biāo)準(zhǔn)端口80上偵聽并且可以在本地機(jī)器上訪問的服務(wù)器( http://localhost/ )的工作配置。 響應(yīng)以/images/開頭的URI的請(qǐng)求,服務(wù)器將從/data/images目錄發(fā)送文件。 例如,響應(yīng)http://localhost/images/logo.png請(qǐng)求,nginx將發(fā)送服務(wù)上的/data/images/logo.png文件。 如果文件不存在,nginx將發(fā)送一個(gè)指示404錯(cuò)誤的響應(yīng)。 不以/images/開頭的URI的請(qǐng)求將映射到/data/www目錄。 例如,響應(yīng)http://localhost/about/example.html請(qǐng)求時(shí),nginx將發(fā)送/data/www/about/example.html文件。

要應(yīng)用新配置,如果尚未啟動(dòng)nginx或者通過執(zhí)行以下命令將重載信號(hào)發(fā)送到nginx的主進(jìn)程:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

如果錯(cuò)誤或異常導(dǎo)致無(wú)法正常工作,可以嘗試查看目錄/usr/local/nginx/logs/var/log/nginx中的access.logerror.log文件中查找原因。

打開瀏覽器或使用CURL訪問Nginx服務(wù)器如下所示 -

完整的nginx.conf文件配置內(nèi)容如下:

#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;

events {
    worker_connections  1024;
}

http {
    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        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

    ## 新服務(wù)(靜態(tài)網(wǎng)站)
    server {
        location / {
            root /data/www;
        }
        location /images/ {
            root /data;
        }
    }
}

4. 設(shè)置簡(jiǎn)單的代理服務(wù)器

nginx的一個(gè)常見用途是將其設(shè)置為代理服務(wù)器,這意味著它可作為一個(gè)接收請(qǐng)求的服務(wù)器,將其傳遞給代理服務(wù)器,從代理服務(wù)器中檢索響應(yīng),并將其發(fā)送給客戶端。

我們將配置一個(gè)基本的代理服務(wù)器,它為來自本地目錄的文件提供圖像請(qǐng)求,并將所有其他請(qǐng)求發(fā)送到代理的服務(wù)器。 在此示例中,兩個(gè)服務(wù)器將在單個(gè)nginx實(shí)例上定義。

首先,通過向nginx配置文件添加一個(gè)server塊來定義代理服務(wù)器,其中包含以下內(nèi)容:

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

這將是一個(gè)監(jiān)聽端口8080的簡(jiǎn)單服務(wù)器(以前,由于使用了標(biāo)準(zhǔn)端口80,所以沒有指定listen指令),并將所有請(qǐng)求映射到本地文件系統(tǒng)上的/data/up1目錄。 創(chuàng)建此目錄并將index.html文件放入其中。 請(qǐng)注意,root指令位于server塊上下文中。 當(dāng)選擇用于服務(wù)請(qǐng)求的location塊不包含自己的root指令時(shí),將使用此root指令。

在上面創(chuàng)建的目錄/data/up1中放入一個(gè)文件:/data/www/demo.html,文件的內(nèi)容就一行,如下 -

<h2>About proxy_pass Page at port 8080</h2>

接下來,使用上一節(jié)中的服務(wù)器配置進(jìn)行修改,使其成為代理服務(wù)器配置。 在第一個(gè)位置塊中,將proxy_pass指令與參數(shù)中指定的代理服務(wù)器的協(xié)議,名稱和端口(在本例中為http://localhost:8080):

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

    location /images/ {
        root /data;
    }
}

我們將修改當(dāng)前使用/images/prefix將請(qǐng)求映射到/data/images目錄下的文件的第二個(gè)location塊,使其與典型文件擴(kuò)展名的圖像請(qǐng)求相匹配。 修改后的位置塊如下所示:

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

該參數(shù)是一個(gè)正則表達(dá)式,匹配所有以.gif,.jpg.png結(jié)尾的URI。正則表達(dá)式之前應(yīng)該是~字符。 相應(yīng)的請(qǐng)求將映射到/data/images目錄。

當(dāng)nginx選擇一個(gè)location塊來提供請(qǐng)求時(shí),它首先檢查指定前綴的location指令,記住具有最長(zhǎng)前綴的location,然后檢查正則表達(dá)式。 如果與正則表達(dá)式匹配,nginx會(huì)選擇此location,否則選擇之前記住的那一個(gè)。

代理服務(wù)器的最終配置將如下所示:

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

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

此服務(wù)器將過濾以.gif,.jpg.png結(jié)尾的請(qǐng)求,并將它們映射到/data/images目錄(通過向root指令的參數(shù)添加URI),并將所有其他請(qǐng)求傳遞到上面配置的代理服務(wù)器。

要應(yīng)用新配置,如果尚未啟動(dòng)nginx或者通過執(zhí)行以下命令將重載信號(hào)發(fā)送到nginx的主進(jìn)程:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

首先測(cè)試上面配置的 8080 端口的服務(wù),訪問服務(wù)的8080端口,得到以下結(jié)果:

再次訪問 80 端口(這里只是一個(gè)代理,它會(huì)把請(qǐng)求轉(zhuǎn)發(fā)給8080的服務(wù),由8080端口這這個(gè)服務(wù)處理并返回結(jié)果到客戶端),得到以下結(jié)果 -

完整的配置nginx.conf文件內(nèi)容如下 -


#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;

events {
    worker_connections  1024;
}

http {
    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        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    ## 新服務(wù)(服務(wù)處理)
    server {
        listen 8080;
        root /data/up1;

        location / {
        }
    }

    ## 代理配置,數(shù)據(jù)轉(zhuǎn)發(fā)
    server {
        location / {
            proxy_pass http://localhost:8080/;
        }

        location ~ \.(gif|jpg|png)$ {
            root /data/images;
        }
    }
}

5. 設(shè)置FastCGI代理

nginx可用于將請(qǐng)求路由到運(yùn)行使用各種框架和PHP等編程語(yǔ)言構(gòu)建的應(yīng)用程序的FastCGI服務(wù)器。
使用FastCGI服務(wù)器的最基本nginx配置包括使用fastcgi_pass指令(而不是proxy_pass指令),以及fastcgi_param指令來設(shè)置傳遞給FastCGI服務(wù)器的參數(shù)。 假設(shè)FastCGI服務(wù)器可以在localhost:9000上訪問。 以上一節(jié)的代理配置為基礎(chǔ),用fastcgi_pass指令替換proxy_pass指令,并將參數(shù)更改為localhost:9000。 在PHP中,SCRIPT_FILENAME參數(shù)用于確定腳本名稱,QUERY_STRING參數(shù)用于傳遞請(qǐng)求參數(shù)。 最終的配置將是:

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

這將設(shè)置一個(gè)服務(wù)器,將除靜態(tài)圖像請(qǐng)求之外的所有請(qǐng)求路由到通過FastCGI協(xié)議在localhost:9000上運(yùn)行的代理服務(wù)器。

有關(guān)Nginx+PHP+FastCGI服務(wù)器,我們將在單獨(dú)的一篇文章:LANM安裝和配置中講解,請(qǐng)從左側(cè)菜單中查看文章標(biāo)題進(jìn)入。