centos下安裝nginx


點擊訪問原文
您還可以加入全棧技術(shù)交流群(QQ群號:254842154)


Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務(wù)器,也是一個 IMAP/POP3/SMTP 代理服務(wù)器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發(fā)的。其特點是占有內(nèi)存少,并發(fā)能力強,事實上nginx的并發(fā)能力確實在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:新浪、網(wǎng)易、騰訊等。在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯的替代品。

1、安裝

http://nginx.org/ 官網(wǎng)下載。我找了一個穩(wěn)定版本下載。

wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar -zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2

還需要下載pcre、openssl、zlib,在這里給出下載地址,并解壓,供編譯時使用。注意,不需要編譯他們,只要在nginx的編譯參數(shù)中指定源碼路徑即可。

pcre: https://sourceforge.net/projects/pcre/files/

wget http://sourceforge.net/projects/pcre/files/pcre/8.32/pcre-8.32.tar.gz/download

openssl: http://www.openssl.org/

wget http://www.openssl.org/source/openssl-1.0.1k.tar.gz

zlib: http://zlib.net/

wget http://zlib.net/zlib-1.2.8.tar.gz

編譯

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre --with-openssl=/tmp/openssl-1.0.1k --with-zlib=/tmp/zlib-1.2.8 --with-pcre=/tmp/pcre-8.32

make
make install

2、配置

簡單的配置。通常,不需要任何配置即可訪問。具體的配置請自行網(wǎng)上查詢。

cd /usr/local/nginx/conf
vim nginx.conf

測試nginx的配置文件是否正確

/usr/local/nginx/nginx  -t    

啟動nginx(確保80端口沒有被暫用,假如服務(wù)器上有apache,關(guān)閉之)

/usr/local/nginx/nginx 

看看是否啟動成功(看看80端口是否在監(jiān)聽)

netstat -ano|grep 80

重啟nginx

/usr/local/nginx/nginx -s reload

關(guān)閉nginx

/usr/local/nginx/nginx -s stop

查看nginx的兩個主要線程

ps aux | grep nginx

3、使nginx支持php

假如php的版本小于5.3,需要單獨安裝php-fpm擴展。大于5.3的php集成了php-fpm,只需要在編譯安裝php時,通過 --enable-fpm --enable-fastcgi 這兩個編譯選項來安裝擴展。假如編譯安裝時忘記了打開這兩個編譯選項,應(yīng)該是可以單獨安裝的,但是我試過了不成功,可能是我的方法不對。于是只能重新編譯php,幸好也沒問題。重新編譯前為了保險起見最好備份一下php.ini。

nginx是通過fast-cgi來解析php請求的,默認通過9000端口通信。

安裝好php-fpm后,需要配置一下參數(shù),比較多。配置文件在
/usr/local/php/etc/php-fpm.conf,不同安裝目錄可能不同。

pid = run/php-fpm.pid
#pid設(shè)置,默認在安裝目錄中的var/run/php-fpm.pid,建議開啟

error_log = log/php-fpm.log
#錯誤日志,默認在安裝目錄中的var/log/php-fpm.log

log_level = notice
#錯誤級別. 可用級別為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調(diào)試信息). 默認: notice.

emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所設(shè)值內(nèi)出現(xiàn)SIGSEGV或者SIGBUS錯誤的php-cgi進程數(shù)如果超過 emergency_restart_threshold個,php-fpm就會優(yōu)雅重啟。這兩個選項一般保持默認值。

process_control_timeout = 0
#設(shè)置子進程接受主進程復(fù)用信號的超時時間. 可用單位: s(秒), m(分), h(小時), 或者 d(天) 默認單位: s(秒). 默認值: 0.

daemonize = yes
#后臺執(zhí)行fpm,默認值為yes,如果為了調(diào)試可以改為no。在FPM中,可以使用不同的設(shè)置來運行多個進程池。 這些設(shè)置可以針對每個進程池單獨設(shè)置。

listen = 127.0.0.1:9000
#fpm監(jiān)聽端口,即nginx中php處理的地址,一般默認值即可。可用格式為: 'ip:port', 'port', '/path/to/unix/socket'. 每個進程池都需要設(shè)置.

listen.backlog = -1
#backlog數(shù),-1表示無限制,由操作系統(tǒng)決定,此行注釋掉就行。backlog含義參考:http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允許訪問FastCGI進程的IP,設(shè)置any為不限制IP,如果要設(shè)置其他主機的nginx也能訪問這臺FPM進程,listen處要設(shè)置成本地可被訪問的IP。默認值是any。每個地址是用逗號分隔. 如果沒有設(shè)置或者為空,則允許任何服務(wù)器請求連接

listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket設(shè)置選項,如果使用tcp方式訪問,這里注釋即可。

user = www
group = www
#啟動進程的帳戶和組

pm = dynamic #對于專用服務(wù)器,pm可以設(shè)置為static。
#如何控制子進程,選項有static和dynamic。如果選擇static,則由pm.max_children指定固定的子進程數(shù)。如果選擇dynamic,則由下開參數(shù)決定:
pm.max_children #,子進程最大數(shù)
pm.start_servers #,啟動時的進程數(shù)
pm.min_spare_servers #,保證空閑進程數(shù)最小值,如果空閑進程小于此值,則創(chuàng)建新的子進程
pm.max_spare_servers #,保證空閑進程數(shù)最大值,如果空閑進程大于此值,此進行清理

pm.max_requests = 1000
#設(shè)置每個子進程重生之前服務(wù)的請求數(shù). 對于可能存在內(nèi)存泄漏的第三方模塊來說是非常有用的. 如果設(shè)置為 '0' 則一直接受請求. 等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量. 默認值: 0.

pm.status_path = /status
#FPM狀態(tài)頁面的網(wǎng)址. 如果沒有設(shè)置, 則無法訪問狀態(tài)頁面. 默認值: none. munin監(jiān)控會使用到

ping.path = /ping
#FPM監(jiān)控頁面的ping網(wǎng)址. 如果沒有設(shè)置, 則無法訪問ping頁面. 該頁面用于外部檢測FPM是否存活并且可以響應(yīng)請求. 請注意必須以斜線開頭 (/)。

ping.response = pong
#用于定義ping請求的返回相應(yīng). 返回為 HTTP 200 的 text/plain 格式文本. 默認值: pong.

request_terminate_timeout = 0
#設(shè)置單個請求的超時中止時間. 該選項可能會對php.ini設(shè)置中的'max_execution_time'因為某些特殊原因沒有中止運行的腳本有用. 設(shè)置為 '0' 表示 'Off'.當(dāng)經(jīng)常出現(xiàn)502錯誤時可以嘗試更改此選項。

request_slowlog_timeout = 10s
#當(dāng)一個請求該設(shè)置的超時時間后,就會將對應(yīng)的PHP調(diào)用堆棧信息完整寫入到慢日志中. 設(shè)置為 '0' 表示 'Off'

slowlog = log/$pool.log.slow
#慢請求的記錄日志,配合request_slowlog_timeout使用

rlimit_files = 1024
#設(shè)置文件打開描述符的rlimit限制. 默認值: 系統(tǒng)定義值默認可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。

rlimit_core = 0
#設(shè)置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整數(shù). 默認值: 系統(tǒng)定義值.

chroot =
#啟動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設(shè)置, 則chroot不被使用.

chdir =
#設(shè)置啟動目錄,啟動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當(dāng)前目錄,或者/目錄(chroot時)

catch_workers_output = yes
#重定向運行過程中的stdout和stderr到主要的錯誤日志文件中. 如果沒有設(shè)置, stdout 和 stderr 將會根據(jù)FastCGI的規(guī)則被重定向到 /dev/null . 默認值: 空.

設(shè)置好后,測試一下配置文件

/usr/local/php/sbin/php-fpm

啟動

/usr/local/php/sbin/php-fpm

看看是否啟動成功了

ps aux | grep php-fpm

我的機器顯示如下

[root@hellojammy html]# ps aux | grep php-fpm
root      1643  0.0  1.0 104272  5464 ?        Ss   22:49   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody    1644  0.0  1.1 104272  6164 ?        S    22:49   0:00 php-fpm: pool www          
nobody    1645  0.0  1.2 104272  6600 ?        S    22:49   0:00 php-fpm: pool www          
root      1651  0.0  0.1   6384   684 pts/1    S+   22:53   0:00 grep php-fpm

或者查看9000端口是否已經(jīng)正在被監(jiān)聽

netstat -lnp | grep :9000

我的機器上顯示如下

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      1643/php-fpm 

再配置nginx的配置文件,使其php支持,

vim /usr/local/nginx/nginx.conf

配置

location ~ \\.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        include        fastcgi.conf;
        }

需要在Server節(jié)點下指定網(wǎng)站根目錄

root /usr/local/apache/htdocs

添加ghost站點,反向代理

    ####ghost博客配置####
server {
    listen       80;
    server_name  www.hello1010.com hello1010.com;
    access_log  logs/ghost.access.log;
    location / {
        root /usr/local/apache/htdocs/ghost;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host   $http_host;
        proxy_pass_header User-Agent; #獲取客戶端User-Agent來判斷每次POST數(shù)據(jù)是否跟第一次請求來自同1個瀏覽器
        proxy_pass http://127.0.0.1:2386;
        proxy_redirect off;
    }
}

添加其他站點

    ####靜態(tài)文件####
server {
    listen       80;
    server_name  static.hello1010.com;
    root /usr/local/nginx/html/static;       
}

最后別忘接了重啟nginx。

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

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

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