作者:fbysss
msn:jameslastchina@hotmail.com
blog:blog.youkuaiyun.com/fbysss
声明:本文由fbysss整理编写,转载请注明出处
关键字:Nginx
Nginx ,爽呆了!
首先编译pcre:进入解压目录
./configure --prefix=/opt/pcre
make
makeinstall
需要注意的是:默认是有问题的。需要做以下操作
mkdir /usr/local/include/pcre
mkdir /usr/local/include/pcre/.libs
cp /opt/pcre/lib/libpcre.a /usr/local/include/pcre/libpcre.a
cp /opt/pcre/lib/libpcre.a /usr/local/include/pcre/libpcre.la
cp /opt/pcre/include/pcre.h /usr/local/include/pcre/pcre.h
cp /usr/local/include/pcre/*.* /usr/local/include/pcre/.libs
./configure --prefix=/opt/nginx -with-pcre=/usr/local/include/pcre
注意路径后面不要加斜杠。
在make的时候,要删掉objs/Makefile里面的一句话
查找./configure --disable-shared 关键字,删除那一行,然后才make
配置:
nginx的配置,简直太人性化了,除了集群的配置,其他的我几乎就没有看帮助文档,完全是心想事成,一点bug都没有,简直太顺利了。
虚拟主机:可以配多个,
listen xxx.xxx.xxx [port]
servername [是否需要在/etc/hosts中配置都不一定(不需要),这里也可以是多个,用空格分隔,比如我既可以做图片服务器,也可以做负载均衡服务器,只不过端口号不一样,那么就配置两个虚拟主机,端口侦听不一样。]
比如图片服务器在本机192.168.0.2上,然后有两个tomcat在192.168.0.3 和192.168.0.4上。
在http段中配置
upstream tomcats{
192.168.0.3:8080
192.168.0.3:8080
}
要注意的一个问题:如果nginx的侦听端口不是80,有时候有问题,转发的时候,没有带上端口号,这可能是一个bug。而配置为80之后就没有任何问题了。
然后在location /中,配置
proxy_pass tomcats 即反向代理,实现分发
虚拟目录配置:
location /hello{
alias /usr/local/sss/hello;
}
其他要注意的就是realip配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
nginx+(1…n)tomcat集群部署时,后端tomcat需要取得用户的IP,这时通过 request.getRemoteAddr()取得的始终是127.0.0.1.
由于用户请求经过nginx,ngigx转发了请求到tomcat后,tomcat取得的始终是nginx的Ip,如果需要取得真实用户IP,只需要在ngix上做些配置。
location / 下设置
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
测试配置:./sbin/nginx -t -c conf/nginx.conf 正确后重启nginx.
Java代码修改如下
out.println("X-Real-IP : " + request.getHeader("X-Real-IP") + "<br>");
其中X-Real-IP即用户真实IP
负载均衡策略
upstream tomcats{
ip_hash;
server 192.168.0.3:8080;
server 192.168.0.4:8080;
}
server {
location / {
proxy_pass http://backend;
}
}根据客户端IP进行负载均衡,针对同一个C类地址段中的客户端选择到后端同一个源服务器,可避免session引起的问题。
还有就是nginx并不提供启停脚本,需要自己编写。
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid
--exec $DAEMON
echo "$NAME."
;;
test)
$DAEMON -t -c /etc/nginx/conf/nginx.conf
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile
/var/run/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid
--exec $DAEMON
echo "$NAME."
;;
upgrade)
echo -n "Upgrade $DESC: "
kill -USR2 `cat /var/run/$NAME.pid`
sleep 1
kill -WINCH `cat /var/run/$NAME.pid`
sleep 1
kill -9 `cat /var/run/$NAME.pid.oldbin`
rm /var/run/$NAME.pid.oldbin
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|test|restart|reload|force-reload|upgrade}" >&2
exit 1
;;
esac
exit 0