web负载均衡与反向代理之nginx

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介: 转载请保留: http://www.cnscn.org(CNS电脑与英语学习网)引用地址:http://blog.chinaunix.net/u/26862/showart_384362.htmlNginx发音为[engine x],是由俄罗斯人IgorSysoev建立的项目,基于BSD许可。
转载请保留: http://www.cnscn.org( CNS电脑与英语学习网)
引用地址: http://blog.chinaunix.net/u/26862/showart_384362.html

Nginx发音为[engine x],是由俄罗斯人IgorSysoev建立的 项目,基于BSD许可。据说他当初是F5的成员之一, 英文主页: http://nginx.net。俄罗斯的一些大 网站已经使用它超过两年多了,一直表现不凡。
使用Apache运行PHP或Rails产生动态 内容,而用Nginx作为 前台反向代理(反向代理又称为服务器加速Server accelerate),原理是将用户的请求转发到目标服务器,然后将结果转发给用户。这样可以保护目标服务器 安全、负载均衡容易实现、有点类似防火墙)

测试 环境:
IP主机为:192.168.0.207
操作 系统:RHEL AS4


所需软件:
文件: nginx-0.5.17.tar.gz
大小: 452KB
下载: 下载


文件: pcre-7.0.tar.bz2
大小: 593KB
下载: 下载




安装步骤:
解压:
#cp nginx-0.5.17.tar.gz /root
#cd /root;tar xvfz nginx-0.5.17.tar.gz
Nginx的编译参数如下:
[root@localhost]#./configure --prefix=/usr/local/nginx
--with-openssl=/usr/include --with-pcre=/usr/include/pcre/ --with-http_stub_status_module
--without-http_memcached_module --without-http_fastcgi_module --without-http_rewrite_module
--without-http_map_module --without-http_geo_module --without-http_autoindex_module

在这里,需要说明一下,由于Nginx的配置文件中要用到正则,所以需要 pcre
模块的支持。我已经安装了 pcre 及 pcre-devel 的rpm包,但是 ngxin 并不能正确找到
.h/.so/.a/.la 文件,因此我做了如下变通:

[root@localhost]#mkdir /usr/include/pcre/.libs/
[root@localhost]#cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.a
[root@localhost]#cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.la

然后:
#cd /root/nginx-0.5.17
#vi objs/Makefile(大概在908行的位置上,注释掉以下 内容:)
./configure --disable-shared

接下来:
#make && make install

2.) 修改配置文件 /usr/local/nginx/conf/nginx.conf
以下是我的 nginx.conf 内容,仅供参考:

#运行用户
user  nobody nobody;

#启动进程
worker_processes  2;

#全局错误日志及PID文件
error_log  logs/error.log notice;
pid        logs/nginx.pid;

#工作 模式及连接数上限
events {
        use epoll;
        worker_connections      1024;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
        #设定mime类型
        include      conf/mime.types;
        default_type  application/octet-stream;

        #设定日志格式
        log_format main        '$remote_addr - $remote_user [$time_local] '
                                                '"$request" $status
$bytes_sent '
                                                '"$http_referer"
"$http_user_agent" '
                                                '"$gzip_ratio"';

        log_format download '$remote_addr - $remote_user [$time_local] '
                                                '"$request" $status
$bytes_sent '
                                                '"$http_referer"
"$http_user_agent" '
                                                '"$http_range"
"$sent_http_content_range"';

        #设定请求缓冲
        client_header_buffer_size    1k;
        large_client_header_buffers  4 4k;

        #开启gzip 模块
        gzip on;
        gzip_min_length  1100;
        gzip_buffers    4 8k;
        gzip_types      text/plain;

        output_buffers  1 32k;
        postpone_output  1460;

        #设定access log
        access_log  logs/access.log  main;

        client_header_timeout  3m;
        client_body_timeout    3m;
        send_timeout          3m;

        sendfile                on;
        tcp_nopush              on;
        tcp_nodelay            on;

        keepalive_timeout  65;

        #设定负载均衡的服务器列表
        upstream mysvr {
                #weigth参数表示权值,权值越高被分配到的几率越大
                #本机上的Squid开启3128端口
                #server 192.168.0.207:3128 weight=5;若加此句,则要启动squid
                server 192.168.0.201:80  weight=1;
                server 192.168.0.211:80  weight=6;
        }

        #设定虚拟主机
        server {
                listen          80;
                server_name    192.168.0.207 www.angle.org;

                charset gb2312;

                #设定本虚拟主机的访问日志
                access_log  logs/www.angle.org.access.log  main;

                #如果访问 /img/*, /js/*, /css/* 资源,则直接取 本地文件,不通过squid
                #如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好
                #location ~ ^/(img|js|css)/  {
                #        root    /data3/Html;
                #        expires 24h;
                #}

                #对 "/" 启用负载均衡
                location / {
                        proxy_pass      http://mysvr;(此处指定上述upstream的命名)

                        proxy_redirect          off;
                        proxy_set_header        Host $host;
                        proxy_set_header        X-Real-IP $remote_addr;
                        proxy_set_header        X-Forwarded-For
$proxy_add_x_forwarded_for;
                        client_max_body_size    10m;
                        client_body_buffer_size 128k;
                        proxy_connect_timeout  90;
                        proxy_send_timeout      90;
                        proxy_read_timeout      90;
                        proxy_buffer_size      4k;
                        proxy_buffers          4 32k;
                        proxy_busy_buffers_size 64k;
                        proxy_temp_file_write_size 64k;
                }

                #设定查看Nginx状态的地址
                location /NginxStatus {
                        stub_status            on;
                        access_log              on;
                        auth_basic              "NginxStatus";
                        auth_basic_user_file  conf/htpasswd;
                }
        }
}

运行以下命令检测配置文件是否无误:
#/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
如下结果则为正确:
2007/04/17 13:33:59 [info] 27677#0: the configuration file conf/nginx.conf syntax is ok
2007/04/17 13:33:59 [info] 27677#0: the configuration file conf/nginx.conf was tested successfully

若以上没报错,则可以运行以下命令启动nginx,在运行以下命令前要保证httpd不是监听80端口,否则nginx启动不了:
#/usr/local/nginx/sbin/nginx  -c /usr/local/nginx/conf/nginx.conf

检查ngins进程是否启动:
#ps aux|grep nginx|grep -v grep(若看到如下几个进程,就已经启动OK,若无则要检查配置)
root      2782  0.0  0.3  3444  856 ?  Ss  12:26  0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    2783  0.0  0.4  3704 1208 ?  S    12:26  0:00 nginx: worker process
nobody    2784  0.0  0.5  3832 1344 ?  S    12:26  0:00 nginx: worker process



给nginxstatus做身份验证:
#cd /usr/local/nginx/conf
#mkdir htpasswd
#htpasswd -c conf/htpasswd ldw
New password:  (此处输入你的密码)
Re-type new password:  (再次输入你的密码)
Adding password for user ldw

查看nginxstatus:
http://192.168.0.207/nginxstatus/,输入验证帐号密码,即可看到类似如下 内容
Active connections: 328
server accepts handled requests
9309 8982 28890
Reading: 1 Writing: 3 Waiting: 324
  第一行表示目前活跃的连接数
  第三行的第三个数字表示Nginx运行到当前 时间接受到的总请求数,如果快达到了上限,就需要加大上限值了。

查看日志:
#cd /usr/local/nginx
#tail -f logs/access.logs(查看访问情况)

附带本人安装配置好的包,只需将该包解压到/usr/local下就OK了……
文件: nginx_install.tar.bz2
大小: 545KB
下载: 下载 
 
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
20天前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
25天前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
9天前
|
负载均衡 算法 应用服务中间件
Nginx的负载均衡
Nginx 是一款高性能的Web服务器与反向代理服务器,支持负载均衡功能,能有效提升系统性能与可靠性。其负载均衡策略包括基于轮询和权重的分配方法,以及IP哈希、最小连接数等算法,可根据实际需求灵活选择。
40 5
|
11天前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
33 3
|
1月前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
205 1
nginx配置反向代理404问题
|
20天前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
37 4
|
20天前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
43 3
|
20天前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
73 3
|
20天前
|
缓存 负载均衡 安全
Nginx的反向代理具体是如何实现的?
Nginx的反向代理具体是如何实现的?
|
1月前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
60 2