Nginx編譯安裝

1. 下載忿墅、解壓Nginx

cd /usr/local/src

wget http://nginx.org/download /nginx-1.8.0.tar.gz

tar -zxvf nginx-1.8.0.tar.gz

2. 編譯安裝Nginx

cd /usr/local/src/nginx-1.8.1

配置編譯參數(shù)

./configure \

--prefix=/usr/local/nginx \

--with-http_realip_module \

--with-http_sub_module \

--with-http_gzip_static_module \

--with-http_stub_status_module \

--with-pcre


配置解釋:

--prefix=/usr/local/nginx \

配置Nginx的安裝目錄

--with-http_realip_module \

允許ngx_http_realip_module模塊(mod_rpaf)

此模塊支持顯示真實來源IP地址陡鹃,主要用于NGINX做前端負(fù)載均衡服務(wù)器使用。

--with-http_sub_module \

允許ngx_http_sub_module模塊

這個模塊可以能夠在nginx的應(yīng)答中搜索并替換文本哮洽。

--with-http_gzip_static_module \

允許ngx_http_gzip_static_module模塊(mod_dflate)填渠。

這個模塊在一個預(yù)壓縮文件傳送到開啟Gzip壓縮的客戶端之前檢查是否已經(jīng)存在以“.gz”結(jié)尾的壓縮文件,這樣可以防止文件被重復(fù)壓縮。

--with-http_stub_status_module \

允許ngx_http_stub_status_module模塊(mod_status)

這個模塊可以取得一些nginx的運行狀態(tài)氛什,如果是工業(yè)狀況莺葫,可以直接取消。


編譯枪眉、安裝

make && make install

3. 啟動并檢測是否啟動成功

/usr/local/nginx/sbin/nginx

ps aux | grep nginx

4. 配置Ngix配置文件

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

找到

location = /50x.html {

root? html;

}

在下面加入以下內(nèi)容

location ~ \.php$ {

root html;

fastcgi_pass unix:/tmp/php-fcgi.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;

include fastcgi_params;

}

上面這段配置的意思就是讓所有的PHP 腳本請求全部轉(zhuǎn)發(fā)到 FastCGI處理. 使用FastCGI默認(rèn)配置

5. 測試PHP解析


vim /usr/local/nginx/html/2.php

寫入以下內(nèi)容

<?php

echo "test php scripts.";

?>

測試解析php

curl localhost/2.php


這里有必要說一下我自己出現(xiàn)的錯誤

剛開始我解析出來的內(nèi)容如下:


就是原來的php文本捺檬,顯然解析失敗。

分析一:更改完nginx配置后贸铜,沒有重新加載

嘗試一:

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload

再次curl localhost/2.php的時候堡纬,出現(xiàn)以下錯誤


分析二:可能是/usr/local/php/html文件夾的權(quán)限不夠,不能讀取html中的2.php文件

嘗試二:查看/usr/local/php/html的權(quán)限發(fā)現(xiàn)是755蒿秦,所以并不是權(quán)限的問題烤镐,但是還是嘗試了一下chmod 777 /usr/local/nginx/html,但是問題依舊棍鳖。

分析三:后來想到在配置php-fpm的時候配置的php-fpm和nginx之間應(yīng)該是socket通信炮叶,而且socket文件就應(yīng)該在/tmp/php-fcgi.sock,所以去查看/tmp但是發(fā)現(xiàn)并沒有此文件渡处,所以說php-fpm和nginx之間無法通信镜悉。懷疑/tmp的權(quán)限不夠,對php-fpm用戶的權(quán)限不夠医瘫,所以無法生成文件侣肄。

嘗試三:去查看/tmp的權(quán)限,發(fā)現(xiàn)是777醇份,此時我的心情是這樣的:

分析四:不甘心的又去看了下php-fpm的配置文件稼锅,往底下翻了翻終于是找到了問題,原來在我的配置底下僚纷,php-fpm是有自己的配置沒被注釋的(被大量的注釋迷昏了頭缰贝,以為所有的都被注釋了)。

嘗試四:將下面[www]下除了咱們添加的內(nèi)容的其他所有沒被注釋的部分全部注釋掉畔濒,重啟php-fpm剩晴,重新加載nginx的配置文件,再次解析侵状,還是解析失敗...

分析五:既然tmp下的socket文件是用來通信的赞弥,那么是不是用戶對這個文件的權(quán)限不夠呢?一看果不其然趣兄,php-fpm用戶對這個文件沒有寫的權(quán)限绽左,故不能通信。

嘗試五:給php-fcgi.sock增加寫的權(quán)限

chmod 777 /tmp/php-fcgi.sock

再次解析艇潭,成功F纯O访铩!



6. 編寫Nginx的啟動腳本鲁纠,并加入系統(tǒng)服務(wù)

vim /etc/init.d/nginx

加入以下內(nèi)容

#!/bin/bash

# chkconfig: - 30 21

# description: http service.

# Source Function Library

. /etc/init.d/functions

# Nginx Settings

NGINX_SBIN="/usr/local/nginx/sbin/nginx"

NGINX_CONF="/usr/local/nginx/conf/nginx.conf"

NGINX_PID="/usr/local/nginx/logs/nginx.pid"

RETVAL=0

prog="Nginx"

start() {

echo -n $"Starting $prog: "

mkdir -p /dev/shm/nginx_temp

daemon $NGINX_SBIN -c $NGINX_CONF

RETVAL=$?

echo

return $RETVAL

}

stop() {

echo -n $"Stopping $prog: "

killproc -p $NGINX_PID $NGINX_SBIN -TERM

rm -rf /dev/shm/nginx_temp

RETVAL=$?

echo

return $RETVAL

}

reload(){

echo -n $"Reloading $prog: "

killproc -p $NGINX_PID $NGINX_SBIN -HUP

RETVAL=$?

echo

return $RETVAL

}

restart(){

stop

start

}

configtest(){

$NGINX_SBIN -c $NGINX_CONF -t

return 0

}

case "$1" in

start)

start

;;

stop)

stop

;;

reload)

reload

;;

restart)

restart

;;

configtest)

configtest

;;

*)

echo $"Usage: $0 {start|stop|reload|restart|configtest}"

RETVAL=1

esac

exit $RETVAL

這個啟動腳本我真的無能為力啊总棵,沒學(xué)過shell編程...

賦予啟動文件權(quán)限755

chmod 755 /etc/init.d/nginx

7. Nginx服務(wù)開機啟動

chkconfig ?--add nginx

chkconfig nginx on


服務(wù)啟動、停止改含、重啟的方法:

service nginx start 或 /etc/init.d/nginx start

service nginx stop 或 /etc/init.d/nginx stop

service nginx restart 或 /etc/init.d/nginx restart

8. 更改nginx的配置情龄,配置虛擬主機

首先將原來的配置文件清空,但是我們最好先備份一下

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

> /usr/local/nginx/conf/nginx.conf

然后編輯文件并寫入以下內(nèi)容

vim /usr/local/nginx/cong/nginx.conf

user nobody nobody;

worker_processes 2;

error_log /usr/local/nginx/logs/nginx_error.log crit;

pid /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;

events

{

use epoll;

worker_connections 6000;

}

http

{

include mime.types;

default_type application/octet-stream;

server_names_hash_bucket_size 3526;

server_names_hash_max_size 4096;

log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'

'$host "$request_uri" $status'

'"$http_referer" "$http_user_agent"';

sendfile on;

tcp_nopush on;

keepalive_timeout 30;

client_header_timeout 3m;

client_body_timeout 3m;

send_timeout 3m;

connection_pool_size 256;

client_header_buffer_size 1k;

large_client_header_buffers 8 4k;

request_pool_size 4k;

output_buffers 4 32k;

postpone_output 1460;

client_max_body_size 10m;

client_body_buffer_size 256k;

client_body_temp_path /usr/local/nginx/client_body_temp;

proxy_temp_path /usr/local/nginx/proxy_temp;

fastcgi_temp_path /usr/local/nginx/fastcgi_temp;

fastcgi_intercept_errors on;

tcp_nodelay on;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 8k;

gzip_comp_level 5;

gzip_http_version 1.1;

gzip_types text/plain application/x-javascript text/css text/htm application/xml;

server

{

listen 80;

server_name localhost;

index index.html index.htm index.php;

root /usr/local/nginx/html;

location ~ \.php$ {

include fastcgi_params;

fastcgi_pass unix:/tmp/php-fcgi.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;

}

}

include /usr/local/nginx/conf/vhosts/*.conf;

}


上面的配置主要就是開啟了其他的一些功能,但是最主要的還是最后一句捍壤,配置了虛擬主機的配置文件的位置骤视。

另外注意一點,這次給nginx指定了用戶和用戶組都是nobody


創(chuàng)建虛擬主機配置文件的目錄和文件

mkdir /usr/local/nginx/conf/vhosts

cd !$

vim default.conf

創(chuàng)建的是一個默認(rèn)虛擬主機鹃觉,所以配置文件中用default_server字段來標(biāo)識

配置文件如下:

server{

listen 80 default_server;

server_name www.liuke.com;

index index.html index.htm index.php;

root /tmp/tmp;

?deny all;

}

大致意思就是說要監(jiān)聽80端口专酗,而且是個默認(rèn)虛擬主機(也就是說無論什么域名只要指向到這臺機器都會訪問到這個虛擬主機)

但是配置文件的最后謝了一句deny all;代表禁止訪問,所以盗扇,不匹配域名的所有訪問都會被禁止

9. 更改php-fpm的配置

vim /usr/local/php/etc/php-fpm.pid

更改配置如下:

pid = /usr/local/php/var/run/php-fpm.pid

error_log = /usr/local/php/var/log/php-fpm.log

[www]

listen = /tmp/php-fcgi.sock

user = php-fpm

group = php-fpm

listen.owner = nobody //和后面的nginx的一致

listen.group = nobody //同上

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests= 500

rlimit_files = 1024

其實和之前配置的差別就是指定了socket文件的監(jiān)聽用戶和監(jiān)聽用戶組都是nobody笼裳,這和之前我讓大家注意的地方(nginx新的配置文件中也增加了用戶和用戶組)是前后呼應(yīng)的,因為nginx和php-fpm要進行通信粱玲,所以要對socket文件具有讀寫權(quán),其他人對這個文件不能有任何其他的權(quán)限這才是安全的拜轨,所以我們讓nginx的用戶和用戶組都是noboody抽减,php-fpm對于socket文件的監(jiān)聽用戶也是nobody,這樣就保證了socket文件的可讀寫性和系統(tǒng)的安全性


但是我有個疑問:為什么不直接讓php-fpm的用戶和用戶組直接也是nobody呢橄碾,這樣就不用費事的去為php-fpm專門建立一個用戶卵沉,為socket文件的監(jiān)聽者指定用戶了?法牲?史汗?


重啟php-fpm服務(wù)

service php-fpm restart

然后我們可以看到的是,/tmp/php-fcgi.sock文件的所有者就變成了nobody拒垃,用戶和用戶組擁有讀寫權(quán)停撞,其他權(quán)限都沒有

10. 測試php解析

curl localhost/2.php




錯誤集錦:

問題1:

error: the HTTP rewrite module requires the PCRE library.

yum install -y pcre-devel

問題2:

出現(xiàn)端口占用的情況,剛有個同學(xué)問我端口沖突了,nginx啟動不了,其實很簡單通熄,這是因為以前你安裝過Apache耕腾,Apache監(jiān)聽的也是80端口,所以會沖突悴了。

把httpd進程給殺了就行,也能去改端口號,但是太麻煩了道宅。不過剛才我殺進程的時候竟然殺不死食听。。污茵。

干脆把httpd的開機自啟關(guān)了
chkconfig httpd off

然后重啟就可以解決了樱报。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市省咨,隨后出現(xiàn)的幾起案子肃弟,更是在濱河造成了極大的恐慌,老刑警劉巖零蓉,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笤受,死亡現(xiàn)場離奇詭異,居然都是意外死亡敌蜂,警方通過查閱死者的電腦和手機箩兽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來章喉,“玉大人汗贫,你說我怎么就攤上這事〗胀眩” “怎么了落包?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長摊唇。 經(jīng)常有香客問我咐蝇,道長,這世上最難降的妖魔是什么巷查? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任有序,我火速辦了婚禮,結(jié)果婚禮上岛请,老公的妹妹穿的比我還像新娘旭寿。我一直安慰自己,他們只是感情好崇败,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布盅称。 她就那樣靜靜地躺著,像睡著了一般后室。 火紅的嫁衣襯著肌膚如雪微渠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天咧擂,我揣著相機與錄音逞盆,去河邊找鬼。 笑死松申,一個胖子當(dāng)著我的面吹牛云芦,可吹牛的內(nèi)容都是我干的俯逾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼舅逸,長吁一口氣:“原來是場噩夢啊……” “哼桌肴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琉历,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤坠七,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旗笔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彪置,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年蝇恶,在試婚紗的時候發(fā)現(xiàn)自己被綠了拳魁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡撮弧,死狀恐怖潘懊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贿衍,我是刑警寧澤授舟,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站贸辈,受9級特大地震影響释树,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裙椭,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望署浩。 院中可真熱鬧揉燃,春花似錦、人聲如沸筋栋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弊攘。三九已至抢腐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間襟交,已是汗流浹背迈倍。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捣域,地道東北人啼染。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓宴合,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迹鹅。 傳聞我的和親對象是個殘疾皇子卦洽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容