快速切换Nginx作为网站前端代理服务器

Nginx比起Apache的高性能高并发特性已经被广泛的应用于生产环境中,如果网站原来使用的是Apache,那如何快速的将Nginx作为前端代理服务器来提供服务呢?

使用一个非常简单的配置文件配置即可。这里摒弃复杂的切换,和生产环境中要考虑的其他诸多因素,单纯简单讲解实现方法。

找到Nginx配置文件,一般位于/usr/local/nginx/conf中,名字为nginx.conf,为了测试,先不改动Apache的任何配置,将Nginx服务在81端口。

找到server配置,修改为以下配置,其中的website.com是网站的域名

server {
        listen       81;
        server_name  website.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://website.com;
            #root   html;
            #index  index.html index.htm;
        }

为了安全,我们可以先测试一下配置文件是否有语法错误

执行下面的命令测试语法是否正确

sudo /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

为什么一定要测试配置文件是否正确呢?

1.Nginx配置文件的每一行后面都有一个分号,许多初次使用者会忘记添加分号,此时可能会出现一些莫名其妙的错误,比如提示缺少括号 }
2.Nginx运行时配置文件错误的载入可能会导致进程不受控制,即使使用stop命令都无法停止进程,所以一定要先测试配置文件是否正确
(ps:如果真的不受控制了,那只好强制杀死进程了,可以使用这条命令杀死进程 sudo killall nginx )

配置文件测试正确之后,reload配置文件即可使配置生效

sudo  /etc/init.d/nginx reload

配置文件已经成功载入
打开浏览器,输入上面配置的网站的域名(原来网站的域名)+端口号81,例如配置文件中给出的website.com,可以使用http://website.com:81来访问,这样之后就将Nginx设置为前端代理服务器了。
如果是Chrome浏览器,可以打开控制台,找到Network,查看加载的第一个文件的Response Header是否已经是Nginx
这里是我的截图,可以看到Server行已经变成Nginx

nginx-proxy

 

 

添加Nginx为系统服务

Nginx安装完成后默认不会注册为系统服务,所以需要手工添加系统服务脚本,为大家提供一个我写好的并测试通过了的Nginx的服务脚本,直接复制,并放到/etc/init.d/下更名为nginx并更改权限chmod +x /etc/init.d/nginx即可.

启动nginx

service nginx start

或者

/etc/init.d/nginx start

其他命令直接看脚本就可以,很简单。

#! /bin/sh
#用来将Nginx注册为系统服务的脚本
#Author CplusHua
#http://www.219.me
#chkconfig: - 85 15
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Nginx Daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
#守护进程不存在就退出
test -x $DAEMON ||exit 0
d_start(){
	$DAEMON ||echo -n "aready running"
}
d_stop(){
	$DAEMON -s quit || echo -n "not running"
}
d_reload(){
	$DAEMON -s reload || echo -n "could not reload"
}
case "$1" in
	start)
		echo -n "Starting $DESC: $NAME"
		d_start
		echo "."
	;;
	stop)
		echo -n "Stopping $DESC: $NAME"
		d_stop
		echo "."
	;;
	reload)
		echo -n "Reloading $DESC: configurationg....."
		d_reload
		echo "reloaded."
	;;
	restart)
		echo -n "Restarting $DESC: $NAME"
		d_stop
		sleep 3
		d_start
		echo "."
	;;
	*)
		echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
		exit 3
	;;
esac

exit 0

注意: #chkconfig: – 85 15 这一行-和85之间必须要有空格,否则可能无法使用chkconfig来配置开机启动

亚马逊amozon AMI实例自动安装Nginx脚本

下载编译安装都很简单,几个常见的依赖包都要先安装上去,所以为了不用反复的看configure后的结果再安装缺少的依赖包,直接用这个脚本安装即可。将这个脚本保存成任意文本格式,sh 执行即可成功在亚马逊的云主机上安装好Nginx

#!bin/bash
sudo yum install update
sudo yum install gcc pcre pcre-devel zlib-devel zlib openssl -y
wget http://nginx.org/download/nginx-1.2.8.tar.gz
tar -xzvf nginx-1.2.8.tar.gz
cd nginx-1.2.8
sudo ./configure
sudo make &make install

Nginx启动

sudo /usr/local/nginx/sbin/nginx

Nginx控制

sudo /usr/local/nginx/sbin/nginx -s stop   立即停止守护进程(用TEAM信号)
sudo /usr/local/nginx/sbin/nginx -s quit   温和的停止守护进程(用QUIT信号)
sudo /usr/local/nginx/sbin/nginx -s reopen 重新打开日志文件
sudo /usr/local/nginx/sbin/nginx -s reload 重新载入配置文件

如果更改了配置文件,而配置文件无效,你可能无法终止Nginx守护进程,这个时候可以采用这个方法终止

sudo killall nginx 终止进程,紧急情况使用

测试配置文件

sudo /usr/local/nginx/sbin/nginx -t [-c 配置文件路径]

为什么要测试配置文件呢?因为一个配置的错误,很可能会导致失去对Nginx的控制权,就像上面所说的,甚至都无法停止正在运行的服务,只能以强制的方式结束进程,这样是不好的,所以可以先使用该命令测试一下配置文件是否正确,再决定是否使用该配置文件。

设置好配置文件之后,不必重启Nginx,只要reload即可(看上面的reload命令),这一点跟Apache是一样的(许多人说更改了配置文件要重启Apache,其实不必,只要reload一下配置文件即可生效,非常迅速,而且不会导致服务中断)。
amozone