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

配置编译参数

./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做前端负载均衡服务器使用。

--with-http_sub_module \

允许ngx_http_sub_module模块

这个模块可以能够在nginx的应答中搜索并替换文本。

--with-http_gzip_static_module \

允许ngx_http_gzip_static_module模块(mod_dflate)。

这个模块在一个预压缩文件传送到开启Gzip压缩的客户端之前检查是否已经存在以“.gz”结尾的压缩文件,这样可以防止文件被重复压缩。

--with-http_stub_status_module \

允许ngx_http_stub_status_module模块(mod_status)

这个模块可以取得一些nginx的运行状态,如果是工业状况,可以直接取消。


编译、安装

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;

}

在下面加入以下内容

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 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置

5. 测试PHP解析


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

写入以下内容

<?php

echo "test php scripts.";

?>

测试解析php

curl localhost/2.php


这里有必要说一下我自己出现的错误

刚开始我解析出来的内容如下:


就是原来的php文本,显然解析失败。

分析一:更改完nginx配置后,没有重新加载

尝试一:

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

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

再次curl localhost/2.php的时候,出现以下错误


分析二:可能是/usr/local/php/html文件夹的权限不够,不能读取html中的2.php文件

尝试二:查看/usr/local/php/html的权限发现是755,所以并不是权限的问题,但是还是尝试了一下chmod 777 /usr/local/nginx/html,但是问题依旧。

分析三:后来想到在配置php-fpm的时候配置的php-fpm和nginx之间应该是socket通信,而且socket文件就应该在/tmp/php-fcgi.sock,所以去查看/tmp但是发现并没有此文件,所以说php-fpm和nginx之间无法通信。怀疑/tmp的权限不够,对php-fpm用户的权限不够,所以无法生成文件。

尝试三:去查看/tmp的权限,发现是777,此时我的心情是这样的:

分析四:不甘心的又去看了下php-fpm的配置文件,往底下翻了翻终于是找到了问题,原来在我的配置底下,php-fpm是有自己的配置没被注释的(被大量的注释迷昏了头,以为所有的都被注释了)。

尝试四:将下面[www]下除了咱们添加的内容的其他所有没被注释的部分全部注释掉,重启php-fpm,重新加载nginx的配置文件,再次解析,还是解析失败...

分析五:既然tmp下的socket文件是用来通信的,那么是不是用户对这个文件的权限不够呢?一看果不其然,php-fpm用户对这个文件没有写的权限,故不能通信。

尝试五:给php-fcgi.sock增加写的权限

chmod 777 /tmp/php-fcgi.sock

再次解析,成功!!!



6. 编写Nginx的启动脚本,并加入系统服务

vim /etc/init.d/nginx

加入以下内容

#!/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

这个启动脚本我真的无能为力啊,没学过shell编程...

赋予启动文件权限755

chmod 755 /etc/init.d/nginx

7. Nginx服务开机启动

chkconfig  --add nginx

chkconfig nginx on


服务启动、停止、重启的方法:

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

然后编辑文件并写入以下内容

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


创建虚拟主机配置文件的目录和文件

mkdir /usr/local/nginx/conf/vhosts

cd !$

vim default.conf

创建的是一个默认虚拟主机,所以配置文件中用default_server字段来标识

配置文件如下:

server{

listen 80 default_server;

server_name www.liuke.com;

index index.html index.htm index.php;

root /tmp/tmp;

�deny all;

}

大致意思就是说要监听80端口,而且是个默认虚拟主机(也就是说无论什么域名只要指向到这台机器都会访问到这个虚拟主机)

但是配置文件的最后谢了一句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文件的监听用户和监听用户组都是nobody,这和之前我让大家注意的地方(nginx新的配置文件中也增加了用户和用户组)是前后呼应的,因为nginx和php-fpm要进行通信,所以要对socket文件具有读写权,其他人对这个文件不能有任何其他的权限这才是安全的,所以我们让nginx的用户和用户组都是noboody,php-fpm对于socket文件的监听用户也是nobody,这样就保证了socket文件的可读写性和系统的安全性


但是我有个疑问:为什么不直接让php-fpm的用户和用户组直接也是nobody呢,这样就不用费事的去为php-fpm专门建立一个用户,为socket文件的监听者指定用户了???


重启php-fpm服务

service php-fpm restart

然后我们可以看到的是,/tmp/php-fcgi.sock文件的所有者就变成了nobody,用户和用户组拥有读写权,其他权限都没有

10. 测试php解析

curl localhost/2.php




错误集锦:

问题1:

error: the HTTP rewrite module requires the PCRE library.

yum install -y pcre-devel

问题2:

出现端口占用的情况,刚有个同学问我端口冲突了,nginx启动不了,其实很简单,这是因为以前你安装过Apache,Apache监听的也是80端口,所以会冲突。

把httpd进程给杀了就行,也能去改端口号,但是太麻烦了。不过刚才我杀进程的时候竟然杀不死。。。

干脆把httpd的开机自启关了
chkconfig httpd off

然后重启就可以解决了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容