阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx实现反向代理和负载均衡的配置及优化

469次阅读
没有评论

共计 10513 个字符,预计需要花费 27 分钟才能阅读完成。

概述:反向代理是指的,服务器代理网络上的客户机请求,将请求转达给内部真实服务器,然后在返回给 Internet 客户端,代理服务器上面没有任何网页资料。反向代理和正向代理没有冲突,可以在防火墙设备中同时使用这两种结合,正向代理可以进行过滤,保护内部网络安全。

软件七层负载均衡大多是基于 HTTP 反向代理,Nginx 反向代理能够支持虚拟主机,可以按照轮询,IP 哈希,URL 哈希,权重方式对后端服务器做负载均衡,还支持后端服务器健康检查。

常见的 Web 负载均衡方法:
1、DNS 轮询:将同一个主机名添加多个 A 记录,DNS 将解析请求安装 A 记录的顺序,随即分配到不同的 IP 上,使用 dig baidu.com 就可以看到不同的 A 记录对应的 IP 地址。缺点:可靠性低,其中一台出现故障,就不会给予回应,就算从 DNS 去掉该服务器 IP,但是也会保存在各地区的 ISP 众多的 DNS 缓存中。系统股灾不均衡,使用简单轮询,不能计算出服务器的负载差异,所以有可能客户集中请求到其中某一台服务器。

2、F5、LVS、DNS 只能解析这里不做讲述

配置环境:
三台 CentOS5.3,一台做 nginx 代理,2 台 apache 做页面测试。apache 端口改为:8080,nginx 使用 80 口接收客户请求。

第 1 部分: 安装
1 建立用户及组
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www

2 安装 pcre 让 nginx 支持 rewrite 方便以后所需
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz
tar zxvf pcre-7.8.tar.gz
cd pcre-7.8/
./configure
make && make install

3 安装 nginx
wget http://sysoev.ru/nginx/nginx-0.7.58.tar.gz
tar zxvf nginx-0.7.58.tar.gz
cd nginx-0.7.58/
./configure –user=www –group=www –prefix=/usr/local/webserver/nginx –with-http_stub_status_module –with-http_ssl_module –with-cc-opt=’-O2′ –with-cpu-opt=opteron
make && make install

# 注意上文中的 –with-cc-opt=’-O2′ –with-cpu-opt=opteron 这是编译器优化, 目前最常用的是 -02 而不是 3. 后面对应 CPU 的型号, 可参照:http://wiki.gentoo.tw/index.php/HOWTO_CFLAG

第 2 部分: 配置及优化配置文件
1 nginx.conf 配置文件:
user    www www;
worker_processes 4;

# [debug | info | notice | warn | error | crit]
error_log    /usr/local/webserver/nginx/logs/nginx_error.log    crit;
pid                /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
        use epoll;
        worker_connections 51200;
}

http
{
        include            mime.types;
        default_type    application/octet-stream;
        source_charset GB2312;
        server_names_hash_bucket_size 256;
        client_header_buffer_size 256k;
        large_client_header_buffers 4 256k;

        #size limits
        client_max_body_size            50m;
        client_body_buffer_size        256k;
        client_header_timeout    3m;
        client_body_timeout 3m;
        send_timeout            3m;
# 参数都有所调整. 目的是解决代理过程中出现的一些 502 499 错误   
        sendfile on;
        tcp_nopush        on;
        keepalive_timeout 120; #参数加大, 以解决做代理时 502 错误
        tcp_nodelay on;
       
        include                    vhosts/upstream.conf;
        include                    vhosts/bbs.linuxtone.conf;

}

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2013-11/92909p2.htm

推荐阅读:

使用 Nginx 如何配置 Tomcat 访问日志记录真实 IP http://www.linuxidc.com/Linux/2012-03/56119.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

LNMP 全功能编译安装 for CentOS 6.3 笔记 http://www.linuxidc.com/Linux/2013-05/83788.htm

CentOS 6.3 安装 LNMP (PHP 5.4,MyySQL5.6) http://www.linuxidc.com/Linux/2013-04/82069.htm

在部署 LNMP 的时候遇到 Nginx 启动失败的 2 个问题 http://www.linuxidc.com/Linux/2013-03/81120.htm

Ubuntu 安装 Nginx php5-fpm MySQL(LNMP 环境搭建) http://www.linuxidc.com/Linux/2012-10/72458.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

2 upstream.conf 配置文件(这也是做负载的配置方法)
upstream.conf
            upstream bbs.linuxtone.com {
                server 192.168.1.4:8099;
            }

 

3 站点配置文件
bbs.linuxtone.conf
server
    {
            listen            80;
            server_name    bbs.linuxtone.conf;
            charset GB2312;
            index index.html index.htm;
            root    /date/wwwroot/linuxtone/;

                location ~ ^/NginxStatus/ {
                        stub_status on;
                        access_log off;
                }

        location / {
            root    /date/wwwroot/linuxtone/;
            proxy_redirect off ;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 50m;
            client_body_buffer_size 256k;
            proxy_connect_timeout 30;
            proxy_send_timeout 30;
            proxy_read_timeout 60;
            proxy_buffer_size 256k;
            proxy_buffers 4 256k;
            proxy_busy_buffers_size 256k;
            proxy_temp_file_write_size 256k;
            proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
            proxy_max_temp_file_size 128m;
            proxy_pass    http://bbs.linuxtone.com;
            }

# 参数都有所调整. 目的是解决代理过程中出现的一些 502 499 错误   
#Add expires header for static content
    location ~* \.(jpg|jpeg|gif|png|swf)$ {
        if (-f $request_filename) {
            root /date/wwwroot/linuxtone/;
            expires            1d;
            break;
            }
    }

        log_format    access    ‘$remote_addr – $remote_user [$time_local] “$request” ‘
                                                ‘$status $body_bytes_sent “$http_referer” ‘
                                                ‘”$http_user_agent” $http_x_forwarded_for’;
        access_log    /exp/nginxlogs/bbs.linuxtone_access.log    access;
   
}

注: 第二种代理方式
nginx 处理下图片,html 等静态的东西. 其它动态由 apache 处理. 因此 apache 也需要做一些参数调整.
设置图片等过期时间. 缓解请求.

如果源与 nginx 在同一台机器建议使用如下方法:
                location / {
                            proxy_pass    http://192.168.1.4:8099/;
                            proxy_redirect default ;
                }

 

针对不同的目录进行代理把下面的配置放到根目录代理的上面
                location /linuxtone/ {
                            proxy_pass    http://192.168.1.4:8099/linuxtone/;
                            proxy_redirect default ;
                }

 

4 源配置
<VirtualHost 192.168.1.4:8099>
        ServerAdmin liuyu105#gmail.com
        DocumentRoot /date/wwwroot/linuxtone
        ServerName bbs.linuxtone.com
        ErrorLog logs/linuxtone_error_log
    CustomLog “|/usr/local/sbin/cronolog logs/linuxtone_access_log.%Y%m%d” combined
</VirtualHost>

概述:反向代理是指的,服务器代理网络上的客户机请求,将请求转达给内部真实服务器,然后在返回给 Internet 客户端,代理服务器上面没有任何网页资料。反向代理和正向代理没有冲突,可以在防火墙设备中同时使用这两种结合,正向代理可以进行过滤,保护内部网络安全。

软件七层负载均衡大多是基于 HTTP 反向代理,Nginx 反向代理能够支持虚拟主机,可以按照轮询,IP 哈希,URL 哈希,权重方式对后端服务器做负载均衡,还支持后端服务器健康检查。

常见的 Web 负载均衡方法:
1、DNS 轮询:将同一个主机名添加多个 A 记录,DNS 将解析请求安装 A 记录的顺序,随即分配到不同的 IP 上,使用 dig baidu.com 就可以看到不同的 A 记录对应的 IP 地址。缺点:可靠性低,其中一台出现故障,就不会给予回应,就算从 DNS 去掉该服务器 IP,但是也会保存在各地区的 ISP 众多的 DNS 缓存中。系统股灾不均衡,使用简单轮询,不能计算出服务器的负载差异,所以有可能客户集中请求到其中某一台服务器。

2、F5、LVS、DNS 只能解析这里不做讲述

配置环境:
三台 CentOS5.3,一台做 nginx 代理,2 台 apache 做页面测试。apache 端口改为:8080,nginx 使用 80 口接收客户请求。

第 1 部分: 安装
1 建立用户及组
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www

2 安装 pcre 让 nginx 支持 rewrite 方便以后所需
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz
tar zxvf pcre-7.8.tar.gz
cd pcre-7.8/
./configure
make && make install

3 安装 nginx
wget http://sysoev.ru/nginx/nginx-0.7.58.tar.gz
tar zxvf nginx-0.7.58.tar.gz
cd nginx-0.7.58/
./configure –user=www –group=www –prefix=/usr/local/webserver/nginx –with-http_stub_status_module –with-http_ssl_module –with-cc-opt=’-O2′ –with-cpu-opt=opteron
make && make install

# 注意上文中的 –with-cc-opt=’-O2′ –with-cpu-opt=opteron 这是编译器优化, 目前最常用的是 -02 而不是 3. 后面对应 CPU 的型号, 可参照:http://wiki.gentoo.tw/index.php/HOWTO_CFLAG

第 2 部分: 配置及优化配置文件
1 nginx.conf 配置文件:
user    www www;
worker_processes 4;

# [debug | info | notice | warn | error | crit]
error_log    /usr/local/webserver/nginx/logs/nginx_error.log    crit;
pid                /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
        use epoll;
        worker_connections 51200;
}

http
{
        include            mime.types;
        default_type    application/octet-stream;
        source_charset GB2312;
        server_names_hash_bucket_size 256;
        client_header_buffer_size 256k;
        large_client_header_buffers 4 256k;

        #size limits
        client_max_body_size            50m;
        client_body_buffer_size        256k;
        client_header_timeout    3m;
        client_body_timeout 3m;
        send_timeout            3m;
# 参数都有所调整. 目的是解决代理过程中出现的一些 502 499 错误   
        sendfile on;
        tcp_nopush        on;
        keepalive_timeout 120; #参数加大, 以解决做代理时 502 错误
        tcp_nodelay on;
       
        include                    vhosts/upstream.conf;
        include                    vhosts/bbs.linuxtone.conf;

}

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2013-11/92909p2.htm

推荐阅读:

使用 Nginx 如何配置 Tomcat 访问日志记录真实 IP http://www.linuxidc.com/Linux/2012-03/56119.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

LNMP 全功能编译安装 for CentOS 6.3 笔记 http://www.linuxidc.com/Linux/2013-05/83788.htm

CentOS 6.3 安装 LNMP (PHP 5.4,MyySQL5.6) http://www.linuxidc.com/Linux/2013-04/82069.htm

在部署 LNMP 的时候遇到 Nginx 启动失败的 2 个问题 http://www.linuxidc.com/Linux/2013-03/81120.htm

Ubuntu 安装 Nginx php5-fpm MySQL(LNMP 环境搭建) http://www.linuxidc.com/Linux/2012-10/72458.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

第 3 部分: 源的优化
1 apache-mpm.conf
<IfModule mpm_prefork_module>
        StartServers                    15
        MinSpareServers            15
        MaxSpareServers            30
        ServerLimit                2536
        MaxClients                    2048
        MaxRequestsPerChild    1500
</IfModule>

2 apache-keepalive
Timeout 120  #与 nginx 的保持一至
KeepAlive On
MaxKeepAliveRequests 400
KeepAliveTimeout 7

 

第 4 部分:PHP 的优化
优化一: 将 PHP 由之前的 xcache 换成 eaccelerator
1 安装
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
tar jxvf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3/
/usr/local/webserver/php/bin/phpize
./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php5/bin/php-config
make
make install

注:PHP 路径以安装为准!

2 配置
sed -i ‘s#extension_dir = “./”#extension_dir = “/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/”\nextension = “memcache.so”\n#’ /etc/php.ini
sed -i ‘s#output_buffering = Off#output_buffering = On#’ /etc/php.ini
sed -i “s#; always_populate_raw_post_data = On#always_populate_raw_post_data = On#g” /etc/php.ini

 

配置 eAccelerator 加速 PHP:
mkdir -p /usr/local/webserver/eaccelerator_cache
vi /etc/php.ini

按 shift+ g 键跳到配置文件的最末尾,加上以下配置信息:
[eaccelerator]
zend_extension=”/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so”
eaccelerator.shm_size=”128″
eaccelerator.cache_dir=”/usr/local/webserver/eaccelerator_cache”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=””
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”300″
eaccelerator.shm_prune_period=”120″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″

优化二: 联系开发重新编译 php 减少 php 的模块. 以减少 php 进程所占用内存数. 这块尽管影响不大, 但也有一定的作用. 编译前也可以参照 nginx 的编译器优化方式安装.

第 5 部分: 测试并启动 nginx
ulimit -SHn 51200
/usr/local/webserver/nginx/sbin/nginx -t
/usr/local/webserver/nginx/sbin/nginx

第 6 部分:nginx 日志切割脚本
#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path=”/exp/nginxlogs/”

mkdir -p ${logs_path}$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/
mv ${logs_path}bbs.linuxtone_access.log ${logs_path}$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/bbs.linuxtone_access_$(date -d “yesterday” +”%Y%m%d”).log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`

crontab -e
00 00 * * * /bin/bash    /usr/local/webserver/nginx/sbin/cut_nginx_log.sh

 

 

Web 服务器发起请求时添加指定的 Header 头信息,后端 web 服务器有多个基于域名的虚拟主机时,通过头信息 Host,用于指定请求的域名,这样后端 web 才能识别反向代理请求哪个虚拟主机处理。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:联系下面 PS 中所写,在后端 web 中就算加上 $http_x_Forwarded_for 这条,也得不到用户的 IP,所以在 nginx 反向代理添加 Header 头信息 X-Forwarded-For 在配合后端服务器日志文件的 $http_x_Forwarded_for 这条就可以获得用户的 IP 地址了。

 PS:假设 Nginx 作为 Web 服务器,nginx 或 Squid 作为反向代理后,就不能获取客户端的真实 IP 地址了,由于在客户端和 Web 增加了中间层,web 没有真实的 IP,通过 $remote_addr 变量拿到是反向代理的 IP,Web 代理可以增加 $http_x_Forwarded_for 信息,用于记录客户端 IP 和原来客户请求的服务器地址,在日志格式中加上即可。

附录:upstream:nginx 支持 4 种算法,下面一一介绍
1、轮询
每个请求按时间顺序分配到不同的后端服务器了,后端服务器 down 掉,自动切除。
2、weight
设定服务器权值:weight=2
                                  weight=4          服务器性能不均时候使用
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,每个访客有固定的后端服务器,可以解决 session 问题
4、fair(第三方)
按后端服务器的响应时间来分配,响应时间短的优先分配
5、url_hash (第三方)
按访问的 url 的 hash 结果分配,使每个 url 定向到同一个后端服务器,后端为缓存服务器比较有效。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计10513字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7981112
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...