Error[8]: Undefined offset: 391, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

Nginx反向代理及负载均衡实现过程

首先 安装nginx

.各节点时间同步

1 2 3 [root@nginx ~]# ntpdate 202.120.2.101 [root@web1 ~]# ntpdate 202.120.2.101 [root@web2 ~]# ntpdate 202.120.2.101

6.关闭防火墙与SELinux

1 2 3 4 5 6 7 8 9 10 11 12 [root@nginx ~]# service iptables stop [root@nginx ~]# chkconfig iptables off  [root@nginx ~]# getenforce  Disabled [root@web1 ~]# service iptables stop [root@web1 ~]# chkconfig iptables off  [root@web1 ~]# getenforce  Disabled [root@web2 ~]# service iptables stop [root@web2 ~]# chkconfig iptables off  [root@web2 ~]# getenforce  Disabled

安装依赖包
#yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

下载nginx
#cd /usr/local/src
#wget http://www.nginx.org/download/nginx-1.0.9.tar.gz
#tar zxvf nginx-1.0.9.tar.gz
#cd nginx-1.0.9

配置安装
#./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
#make
#make install

2.新建nginx用户与组

1 2 3 4 [root@nginx src]# groupadd -g 108  -r nginx [root@nginx src]# useradd -u 108 -r -g 108 nginx  [root@nginx src]# id nginx  uid=108(nginx) gid=108(nginx) 组=108(nginx)


为nginx提供SysV init脚本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 [root@nginx ~]# cat /etc/init.d/nginx #!/bin/sh  # nginx - this script starts and stops the nginx daemon  # 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  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  make_dirs() {     # make required directories     user=`nginx -V 2>&1 | grep "configure arguments:" sed 's/[^*]*--user=\([^ ]*\).*//g' -`     options=`$nginx -V 2>&1 | grep 'configure arguments:'    for opt in $options; do         if [ `echo $opt | grep '.*-temp-path'` ]; then             value=`echo $opt | cut -d "=" -f 2`             if [ ! -d "$value" ]; then                 # echo "creating" $value                 mkdir -p $value && chown -R $user $value             fi         fi     done  start() {      [ -x $nginx ] || exit      [ -f $NGINX_CONF_FILE ] || exit      make_dirs      echo -n $"Starting $prog: "      daemon $nginx -c $NGINX_CONF_FILE      retval=$?      echo      [ $retval -eq 0 ] && touch $lockfile      return $retval  stop() {      echo -n $"Stopping $prog: "      killproc $prog -QUIT      retval=$?      echo      [ $retval -eq 0 ] && rm -f $lockfile      return $retval  restart() {      configtest || return $?      stop      sleep      start  reload() {      configtest || return $?      echo -n $"Reloading $prog: "      killproc $nginx -HUP      RETVAL=$?      echo  force_reload() {      restart  configtest() {    $nginx -t -c $NGINX_CONF_FILE  rh_status() {      status $prog  rh_status_q() {      rh_status >/dev/null 2>&1  case "" in      start)          rh_status_q && exit                    ;;      stop)          rh_status_q || exit                    ;;      restart|configtest)                    ;;      reload)          rh_status_q || exit                    ;;      force-reload)          force_reload          ;;      status)          rh_status          ;;      condrestart|try-restart)          rh_status_q || exit              ;;      *)          echo $"Usage:          {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"  exit esac 为此脚本赋予执行权限

[root@nginx ~]

1 # chmod +x /etc/init.d/nginx添加至服务管理列表,并让其开机自动启动

[root@nginx ~]

1 2 3 4 # chkconfig --add nginx[root@nginx ~] # chkconfig nginx on [root@nginx ~] # chkconfig nginx --list nginx              0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 8.启动nginx

[root@nginx ~]

1 2 # service nginx start正在启动 nginx:    查看一下端口

[root@nginx ~]

1 2 # netstat -ntlp | grep :80反向代理

备份  cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

                         proxy_set_header  X-Real-IP  $remote_addr; 

[root@localhost nginx-1.0.9]# mkdir /usr/html/forum

[root@localhost nginx-1.0.9]# vi /usr/html/forum/index.html

然后 通过 http://192.168.16.246/forum/   访问页面

在 另一台(服务器 httpd配置如下)

[root@web1 ~]# cd /var/www/html/

mkdir bbs

vi /var/www/html/bbs/index.html


添加

location /forum/ {

                proxy_pass http://192.168.16.230/bbs;

                指令说明

        }

proxy_set_header
语法

默认值:proxy_set_header header value 
使用字段: Host and Connection 
X-Real-IP 也会被传送至客户端:http, server, location 
这个指令允许将发送到被代理服务器的请求头重新定义或者增加一些字段。这个值可以是一个文本,变量或者它们的组合。proxy_set_header在指定的字段中没有定义时会从它的上级字段继承。


这样我每次转发给后端的时候 后端都会有一个首部叫X-Real-IP 这个%h

接下来 我们修改vi /etc/httpd/conf/httpd.conf

把LogFormat "修改为:LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

负载均衡

这样在访问web服务器时记录的 不是nginx转发器的ip 而是访问用户的ip 有利于日志分析

这是将/forum 下的文件转发到 另一台web服务器上 万一后端的web 扛不住了 怎么办》?

                              upstream 负载均衡模块说明


安装scp的软件包:

# yum install openssh-clients

这是我学习的一个命令 scp  2端都要安装openssh

scp /var/www/html/bbs/index.html 192.168.16.240:/var/www/html/ 这样就复制到240上去了 只要做下修改就行

web1  mv /var/www/html/bbs/index.html /var/www/html/index.html

在service上添加如下

这里注释掉默认的location 具体如下图

upstream webserver{

    server 192.168.16.230 weight=1;

    server 192.168.16.240 weight=1;

}

如果不幸某天web机器down了 nginx 有自带的健康检查功能 可以自己自动设置秒数 默认为10秒

   location / {

                proxy_pass http://webserver/;

                proxy_set_header  X-Real-IP $remote_addr;

      }


这样当你访问 192.168.16.246时 刷新第一个页面是web1的页面 刷新第二个页面是第二个web2页面


max_fails=2 fail_timeout=2;

upstream webserver{

    server 192.168.16.230 weight=1;max_fails=2 fail_timeout=2;

    server 192.168.16.240 weight=1;我们这里设置的是4秒时间

}

这样我们把web2 down了 ;刷新的页面永远是web1  web2启用 他又自动循环

那么会带来用户体验的降低 

假如 2台web服务器down机了 sorry页面。。 我们需要定义这里我就用本地的8080端口来区别 

创建一个虚拟主机 

然后创建mkdir -pv /web/errorpages 目录

 server {

         listen 8080;

         server_name 127.0.0.1;

         root /web/errorpages;

         index index.html;

}

接下来添加

vi index.html页面。。。。。

    server 127.0.0.1:8080 backup;

upstream webserver{

    server 192.168.16.230 weight=1 max_fails=2 fail_timeout=2;

    server 192.168.16.240 weight=1 max_fails=2 fail_timeout=2;

这样down掉负载2台  接着访问192.168.16.246 的页面 会如图下

[+++]

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Nginx反向代理及负载均衡实现过程_服务器_内存溢出

Nginx反向代理及负载均衡实现过程

Nginx反向代理及负载均衡实现过程,第1张

Nginx反向代理及负载均衡实现过程

首先 安装nginx

.各节点时间同步

1 2 3 [root@nginx ~]# ntpdate 202.120.2.101 [root@web1 ~]# ntpdate 202.120.2.101 [root@web2 ~]# ntpdate 202.120.2.101

6.关闭防火墙与SELinux

1 2 3 4 5 6 7 8 9 10 11 12 [root@nginx ~]# service iptables stop [root@nginx ~]# chkconfig iptables off  [root@nginx ~]# getenforce  Disabled [root@web1 ~]# service iptables stop [root@web1 ~]# chkconfig iptables off  [root@web1 ~]# getenforce  Disabled [root@web2 ~]# service iptables stop [root@web2 ~]# chkconfig iptables off  [root@web2 ~]# getenforce  Disabled

安装依赖包
#yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

下载nginx
#cd /usr/local/src
#wget http://www.nginx.org/download/nginx-1.0.9.tar.gz
#tar zxvf nginx-1.0.9.tar.gz
#cd nginx-1.0.9

配置安装
#./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
#make
#make install

2.新建nginx用户与组

1 2 3 4 [root@nginx src]# groupadd -g 108  -r nginx [root@nginx src]# useradd -u 108 -r -g 108 nginx  [root@nginx src]# id nginx  uid=108(nginx) gid=108(nginx) 组=108(nginx)


为nginx提供SysV init脚本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 [root@nginx ~]# cat /etc/init.d/nginx #!/bin/sh  # nginx - this script starts and stops the nginx daemon  # 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  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  make_dirs() {     # make required directories     user=`nginx -V 2>&1 | grep "configure arguments:" sed 's/[^*]*--user=\([^ ]*\).*//g' -`     options=`$nginx -V 2>&1 | grep 'configure arguments:'    for opt in $options; do         if [ `echo $opt | grep '.*-temp-path'` ]; then             value=`echo $opt | cut -d "=" -f 2`             if [ ! -d "$value" ]; then                 # echo "creating" $value                 mkdir -p $value && chown -R $user $value             fi         fi     done  start() {      [ -x $nginx ] || exit      [ -f $NGINX_CONF_FILE ] || exit      make_dirs      echo -n $"Starting $prog: "      daemon $nginx -c $NGINX_CONF_FILE      retval=$?      echo      [ $retval -eq 0 ] && touch $lockfile      return $retval  stop() {      echo -n $"Stopping $prog: "      killproc $prog -QUIT      retval=$?      echo      [ $retval -eq 0 ] && rm -f $lockfile      return $retval  restart() {      configtest || return $?      stop      sleep      start  reload() {      configtest || return $?      echo -n $"Reloading $prog: "      killproc $nginx -HUP      RETVAL=$?      echo  force_reload() {      restart  configtest() {    $nginx -t -c $NGINX_CONF_FILE  rh_status() {      status $prog  rh_status_q() {      rh_status >/dev/null 2>&1  case "" in      start)          rh_status_q && exit                    ;;      stop)          rh_status_q || exit                    ;;      restart|configtest)                    ;;      reload)          rh_status_q || exit                    ;;      force-reload)          force_reload          ;;      status)          rh_status          ;;      condrestart|try-restart)          rh_status_q || exit              ;;      *)          echo $"Usage:          {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"  exit esac 为此脚本赋予执行权限

[root@nginx ~]

1 # chmod +x /etc/init.d/nginx添加至服务管理列表,并让其开机自动启动

[root@nginx ~]

1 2 3 4 # chkconfig --add nginx[root@nginx ~] # chkconfig nginx on [root@nginx ~] # chkconfig nginx --list nginx              0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭 8.启动nginx

[root@nginx ~]

1 2 # service nginx start正在启动 nginx:    查看一下端口

[root@nginx ~]

1 2 # netstat -ntlp | grep :80反向代理

备份  cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

                         proxy_set_header  X-Real-IP  $remote_addr; 

[root@localhost nginx-1.0.9]# mkdir /usr/html/forum

[root@localhost nginx-1.0.9]# vi /usr/html/forum/index.html

然后 通过 http://192.168.16.246/forum/   访问页面

在 另一台(服务器 httpd配置如下)

[root@web1 ~]# cd /var/www/html/

mkdir bbs

vi /var/www/html/bbs/index.html


添加

location /forum/ {

                proxy_pass http://192.168.16.230/bbs;

                指令说明

        }

proxy_set_header
语法

默认值:proxy_set_header header value 
使用字段: Host and Connection 
X-Real-IP 也会被传送至客户端:http, server, location 
这个指令允许将发送到被代理服务器的请求头重新定义或者增加一些字段。这个值可以是一个文本,变量或者它们的组合。proxy_set_header在指定的字段中没有定义时会从它的上级字段继承。


这样我每次转发给后端的时候 后端都会有一个首部叫X-Real-IP 这个%h

接下来 我们修改vi /etc/httpd/conf/httpd.conf

把LogFormat "修改为:LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

负载均衡

这样在访问web服务器时记录的 不是nginx转发器的ip 而是访问用户的ip 有利于日志分析

这是将/forum 下的文件转发到 另一台web服务器上 万一后端的web 扛不住了 怎么办》?

                              upstream 负载均衡模块说明


安装scp的软件包:

# yum install openssh-clients

这是我学习的一个命令 scp  2端都要安装openssh

scp /var/www/html/bbs/index.html 192.168.16.240:/var/www/html/ 这样就复制到240上去了 只要做下修改就行

web1  mv /var/www/html/bbs/index.html /var/www/html/index.html

在service上添加如下

这里注释掉默认的location 具体如下图

upstream webserver{

    server 192.168.16.230 weight=1;

    server 192.168.16.240 weight=1;

}

如果不幸某天web机器down了 nginx 有自带的健康检查功能 可以自己自动设置秒数 默认为10秒

   location / {

                proxy_pass http://webserver/;

                proxy_set_header  X-Real-IP $remote_addr;

      }


这样当你访问 192.168.16.246时 刷新第一个页面是web1的页面 刷新第二个页面是第二个web2页面


max_fails=2 fail_timeout=2;

upstream webserver{

    server 192.168.16.230 weight=1;max_fails=2 fail_timeout=2;

    server 192.168.16.240 weight=1;我们这里设置的是4秒时间

}

这样我们把web2 down了 ;刷新的页面永远是web1  web2启用 他又自动循环

那么会带来用户体验的降低 

假如 2台web服务器down机了 sorry页面。。 我们需要定义这里我就用本地的8080端口来区别 

创建一个虚拟主机 

然后创建mkdir -pv /web/errorpages 目录

 server {

         listen 8080;

         server_name 127.0.0.1;

         root /web/errorpages;

         index index.html;

}

接下来添加

vi index.html页面。。。。。

    server 127.0.0.1:8080 backup;

upstream webserver{

    server 192.168.16.230 weight=1 max_fails=2 fail_timeout=2;

    server 192.168.16.240 weight=1 max_fails=2 fail_timeout=2;

这样down掉负载2台  接着访问192.168.16.246 的页面 会如图下

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/784270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存