当前位置: > Linux服务器 > nginx >

Nginx配置文件详细说明

时间:2015-05-07 22:51来源:未知 作者:admin
   最近在研究负载均衡,今天终于把环境搭好了,在此记录下Nginx服务器搭建方法以及 nginx.conf 的配置文件说明, 部分注释收集与网络.

    本文主要帮助大家能快速搭建一个可用的负载均衡环境.

    首先是需要JBOSS服务器若干,具体搭建方法在此不做描述.

安装nginx,

shell代码 

shell>> cd /opt  

shell>> wget http://nginx.org/download/nginx-1.0.6.tar.gz  

shell>> tar xzvf nginx-0.7.64.tar.gz  

shell>> cd nginx-1.0.6

shell>> ./configure \  

 

  •     --user=nginx \  
  •     --group=nginx \  
  •     --prefix=/opt/nginx \  
  •     --sbin-path=/usr/sbin/nginx \  
  •     --conf-path=/etc/nginx/nginx.conf \  
  •     --error-log-path=/var/log/nginx/error.log \  
  •     --http-log-path=/var/log/nginx/access.log \  
  •     --http-client-body-temp-path=/tmp/nginx/client_body \  
  •     --http-proxy-temp-path=/tmp/nginx/proxy \  
  •     --http-fastcgi-temp-path=/tmp/nginx/fastcgi \  
  •     --pid-path=/var/run/nginx.pid \  
  •     --lock-path=/var/lock/subsys/nginx \  
  •     --with-http_stub_status_module
     
    这里解释一下:
    # --user            是指启用程序所属用户
    # --group           是指启动程序所属组
    # --prefix          是指nginx安装目录(不是源代码目录)
    # --sbin-path       是指nginx命令位置
    # --conf-path       是指配置文件路径
    # --error-log-path  是错误日志路径
    # --http-log-path   是访问日志
其他是一些临时文件的路径和做linux service需要用到的文件
# --with-http_stub_status_module    需要监控服务需安装此监控状态模块

 

然后:

shell>> cd /opt/nginx  

shell>> make  

shell>> make install

    到此为止,NGINX已经可以正常启动了,我们可以cd到nginx安装目录执行 ./sbin/nginx 启动nginx.

    但是我们如果想要把nginx做成一个服务,必须要写一个shell.

    简单说一下,

    # chkconfig:   - 85 15 所有运行级别,启动优先级85, 关闭优先级15

    # processname: 进程名称

    # config:      nginx配置文件位置

    # config:      系统会优先找第一个,如果找不到再去找第二个

    # pidfile:     进程ID存放文件,用来存放程序启动后的进程ID

    # Source function library.  linux常用的方法库,有兴趣可以去看看service XXX status 就使用了里边的一个方法

    # Source networking configuration.  网络配置

 

[plain] view plaincopyprint?
  1. #!/bin/sh    
  2. #    
  3. # nginx - this script starts and stops the nginx daemon    
  4. #         by haitao.tu at 2009-12-15    
  5. #         email:tuhaitao@foxmail.com    
  6. #    
  7. # chkconfig:   - 85 15    
  8. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \    
  9. #               proxy and IMAP/POP3 proxy server    
  10. # processname: nginx    
  11. # config:      /etc/nginx/nginx.conf    
  12. # config:      /etc/sysconfig/nginx    
  13. # pidfile:     /var/run/nginx.pid    
  14.     
  15. # Source function library.    
  16. . /etc/rc.d/init.d/functions    
  17.     
  18. # Source networking configuration.    
  19. . /etc/sysconfig/network    
  20.     
  21. # Check that networking is up.    
  22. [ "$NETWORKING" = "no" ] && exit 0    
  23.     
  24. nginx="/usr/sbin/nginx"    
  25. prog=$(basename $nginx)    
  26.     
  27. NGINX_CONF_FILE="/etc/nginx/nginx.conf"    
  28.     
  29. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx    
  30.     
  31. lockfile=/var/lock/subsys/nginx    
  32.     
  33. start() {    
  34.     [ -x $nginx ] || exit 5    
  35.     [ -f $NGINX_CONF_FILE ] || exit 6    
  36.     echo -n {1}quot;Starting $prog: "    
  37.     daemon $nginx -c $NGINX_CONF_FILE    
  38.     retval=$?    
  39.     echo    
  40.     [ $retval -eq 0 ] && touch $lockfile    
  41.     return $retval    
  42. }    
  43.     
  44. stop() {    
  45.     echo -n {1}quot;Stopping $prog: "    
  46.     killproc $prog    
  47.     retval=$?    
  48.     echo    
  49.     [ $retval -eq 0 ] && rm -f $lockfile    
  50.     return $retval    
  51. }    
  52.     
  53. restart() {    
  54.     configtest_q || configtest || return 6    
  55.     stop    
  56.     start    
  57. }    
  58.     
  59. reload() {    
  60.     configtest_q || configtest || return 6    
  61.     echo -n {1}quot;Reloading $prog: "    
  62.     killproc $nginx -HUP    
  63.     echo    
  64. }    
  65.     
  66. configtest() {    
  67.   $nginx -t -c $NGINX_CONF_FILE    
  68. }    
  69.     
  70. configtest_q() {    
  71.     configtest >/dev/null 2>&1    
  72. }    
  73.     
  74. rh_status() {    
  75.     status $prog    
  76. }    
  77.     
  78. rh_status_q() {    
  79.     rh_status >/dev/null 2>&1    
  80. }    
  81.     
  82. # Upgrade the binary with no downtime.    
  83. upgrade() {    
  84.     local pidfile="/var/run/${prog}.pid"    
  85.     local oldbin_pidfile="${pidfile}.oldbin"    
  86.     
  87.     configtest_q || configtest || return 6    
  88.     echo -n {1}quot;Staring new master $prog: "    
  89.     killproc $nginx -USR2    
  90.     retval=$?    
  91.     echo     
  92.     sleep 1    
  93.     if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]];  then    
  94.         echo -n {1}quot;Graceful shutdown of old $prog: "    
  95.         killproc -p ${oldbin_pidfile} -QUIT    
  96.         retval=$?    
  97.         echo     
  98.         return 0    
  99.     else    
  100.         echo {1}quot;Something bad happened, manual intervention required, maybe restart?"    
  101.         return 1    
  102.     fi    
  103. }    
  104.     
  105. case "$1" in    
  106.     start)    
  107.         rh_status_q && exit 0    
  108.         $1    
  109.         ;;    
  110.     stop)    
  111.         rh_status_q || exit 0    
  112.         $1    
  113.         ;;    
  114.     restart|configtest)    
  115.         $1    
  116.         ;;    
  117.     force-reload|upgrade)    
  118.         rh_status_q || exit 7    
  119.         upgrade    
  120.         ;;    
  121.     reload)    
  122.         rh_status_q || exit 7    
  123.         $1    
  124.         ;;    
  125.     status|status_q)    
  126.         rh_$1    
  127.         ;;    
  128.     condrestart|try-restart)    
  129.         rh_status_q || exit 7    
  130.         restart    
  131.             ;;    
  132.     *)    
  133.         echo {1}quot;Usage: $0 {start|stop|reload|configtest|status|force-reload|upgrade|restart}"    
  134.         exit 2    
  135. esac   
#!/bin/sh  
#  
# nginx - this script starts and stops the nginx daemon  
#         by haitao.tu at 2009-12-15  
#         email:tuhaitao@foxmail.com  
#  
# chkconfig:   - 85 15  
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \  
#               proxy and IMAP/POP3 proxy server  
# processname: nginx  
# config:      /etc/nginx/nginx.conf  
# config:      /etc/sysconfig/nginx  
# pidfile:     /var/run/nginx.pid  
  
# Source function library.  
. /etc/rc.d/init.d/functions  
  
# Source networking configuration.  
. /etc/sysconfig/network  
  
# Check that networking is up.  
[ "$NETWORKING" = "no" ] && exit 0  
  
nginx="/usr/sbin/nginx"  
prog=$(basename $nginx)  
  
NGINX_CONF_FILE="/etc/nginx/nginx.conf"  
  
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx  
  
lockfile=/var/lock/subsys/nginx  
  
start() {  
    [ -x $nginx ] || exit 5  
    [ -f $NGINX_CONF_FILE ] || exit 6  
    echo -n {1}quot;Starting $prog: "  
    daemon $nginx -c $NGINX_CONF_FILE  
    retval=$?  
    echo  
    [ $retval -eq 0 ] && touch $lockfile  
    return $retval  
}  
  
stop() {  
    echo -n {1}quot;Stopping $prog: "  
    killproc $prog  
    retval=$?  
    echo  
    [ $retval -eq 0 ] && rm -f $lockfile  
    return $retval  
}  
  
restart() {  
    configtest_q || configtest || return 6  
    stop  
    start  
}  
  
reload() {  
    configtest_q || configtest || return 6  
    echo -n {1}quot;Reloading $prog: "  
    killproc $nginx -HUP  
    echo  
}  
  
configtest() {  
  $nginx -t -c $NGINX_CONF_FILE  
}  
  
configtest_q() {  
    configtest >/dev/null 2>&1  
}  
  
rh_status() {  
    status $prog  
}  
  
rh_status_q() {  
    rh_status >/dev/null 2>&1  
}  
  
# Upgrade the binary with no downtime.  
upgrade() {  
    local pidfile="/var/run/${prog}.pid"  
    local oldbin_pidfile="${pidfile}.oldbin"  
  
    configtest_q || configtest || return 6  
    echo -n {1}quot;Staring new master $prog: "  
    killproc $nginx -USR2  
    retval=$?  
    echo   
    sleep 1  
    if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]];  then  
        echo -n {1}quot;Graceful shutdown of old $prog: "  
        killproc -p ${oldbin_pidfile} -QUIT  
        retval=$?  
        echo   
        return 0  
    else  
        echo {1}quot;Something bad happened, manual intervention required, maybe restart?"  
        return 1  
    fi  
}  
  
case "$1" in  
    start)  
        rh_status_q && exit 0  
        $1  
        ;;  
    stop)  
        rh_status_q || exit 0  
        $1  
        ;;  
    restart|configtest)  
        $1  
        ;;  
    force-reload|upgrade)  
        rh_status_q || exit 7  
        upgrade  
        ;;  
    reload)  
        rh_status_q || exit 7  
        $1  
        ;;  
    status|status_q)  
        rh_$1  
        ;;  
    condrestart|try-restart)  
        rh_status_q || exit 7  
        restart  
            ;;  
    *)  
        echo {1}quot;Usage: $0 {start|stop|reload|configtest|status|force-reload|upgrade|restart}"  
        exit 2  
esac 

 

 

    好了,已经做成chkconfig了,下边需要配置一下nginx反向代理,需要修改/usr/local/nginx/nginx.conf配置文件

 

[plain] view plaincopyprint?
  1. user  nginx;    
  2. worker_processes  2;    
  3.     
  4. error_log   /log/nginx/error.log;    
  5. #error_log  /var/log/nginx/error.log  notice;    
  6. #error_log  /var/log/nginx/error.log  info;    
  7.     
  8. pid         /run/nginx.pid;    
  9.     
  10.     
  11. events {    
  12.     use epoll; # 采用epoll,是linux下最快的event    
  13.     worker_connections  2048;    
  14. }    
  15.     
  16.     
  17. http {    
  18.     include       mime.types;    
  19.     default_type  application/octet-stream;    
  20.     sendfile        on;    
  21.     keepalive_timeout  65;    
  22.     #gzip  on;    
  23.     
  24.     #反向代理配置 ,向内网6台jboss转发    
  25.     upstream jboss {    
  26.         server 192.168.162.35:8080 weight=10;  
  27.         server 192.168.162.11:8080 weight=8;  
  28.         server 192.168.162.61:8080 weight=2;  
  29.     }    
  30.     
  31.     server {    
  32.         listen       2011;    
  33.         server_name  localhost;    
  34.     
  35.         location ~ ^/nginx_status/ {    
  36.             stub_status on;    
  37.             access_log off;    
  38.         }    
  39.     
  40.         location / {    
  41.             proxy_pass http://jboss;    
  42.         }    
  43.     
  44.         error_page   500 502 503 504  /50x.html;    
  45.         location = /50x.html {    
  46.             root   html;    
  47.         }    
  48.     
  49.     }    
  50.     
  51. }   
user  nginx;  
worker_processes  2;  
  
error_log   /log/nginx/error.log;  
#error_log  /var/log/nginx/error.log  notice;  
#error_log  /var/log/nginx/error.log  info;  
  
pid         /run/nginx.pid;  
  
  
events {  
    use epoll; # 采用epoll,是linux下最快的event  
    worker_connections  2048;  
}  
  
  
http {  
    include       mime.types;  
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
    #gzip  on;  
  
    #反向代理配置 ,向内网6台jboss转发  
    upstream jboss {  
        server 192.168.162.35:8080 weight=10;
        server 192.168.162.11:8080 weight=8;
        server 192.168.162.61:8080 weight=2;
    }  
  
    server {  
        listen       2011;  
        server_name  localhost;  
  
        location ~ ^/nginx_status/ {  
            stub_status on;  
            access_log off;  
        }  
  
        location / {  
            proxy_pass http://jboss;  
        }  
  
        error_page   500 502 503 504  /50x.html;  
        location = /50x.html {  
            root   html;  
        }  
  
    }  
  
} 

 

OK, 没什么大问题的话, 你的nginx已经具体负载均衡的功能了,

 

 

可能存在的问题

    1,  session复制问题

 

以前用apache做负载均衡的时候,是选择了用 session sticky的模式,这样的话,用户每次进来都会是同一个服务器中的session,不会被转发到其他的服务器上。在这样的情况下,tomcat即使不做session复制也不会影响用户访问。但是nginx并不支持sticky功能。所以必须要做session复制。否则很多地方就根本没法用。比如登录过程,先等到了第一个tomcat上,产生了一个session,在刷新页面,刷到另外一个tomcat的机器上,没有这个session,就会出现问题了。所以程序员在写jsp的时候也要注意这一点

 

 举个简单的例子,比如我们在单机应用情况下修改SESSION中用户的某一个数据,那么通常就是:

User user = (User)request.getSession().getAttribute(“user”);

User.setName(“my name”);

 

这样我们就是直接存取出来,然后进行修改,虽然在单机情况下没有问题,但是在集群条件下,这样就导致了多台WEB服务器上的SESSION不同步的问题,因为SESSION并没有改变,Tomcat无法监视session中某个数据的值是否发生了变化。因此,我们还需要执行如下操作以保证SESSION的同步:

Request.getSession().setAttribute(“user”, user);

所以,我们在操作SESSION的时候要特别注意!另外的建议就是,我们应该尽可能的不要修改SESSION中的数据。

可能经常会遇到session复制不正常的情况。除了在服务端找原因再也程序上找下原因。都是有可能导致session复制不正常的

 

    2.页面同步

 

为确保后面tomcat的服务器上的页面程序是一致的,可以采用如下方式

a,rsync同步,或者做成页面按钮,提供给编辑,修改了程序即使点击同步

b,共享区域存储,或者采取drbd网络raid模式 

 

    3,确认nginx可以转发成功

 

在nginx上wget一下后面转发的url(包过端口),如果可以打开,那就可以转发过去。如果不能打开,则无法转发

 

    关于nginx配置文件的详细说明及配置方法,会在后续博文中继续和大家一起探讨.

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容