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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 转载请保留: 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
下载: 下载 
 
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
9月前
|
负载均衡 网络协议 算法
一文读懂什么是Nginx?它能否实现IM的负载均衡?
Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡方案,从某种意义上来讲,Nginx几乎是低成本、高负载Web服务端代名词。 如此深入人心的Nginx,很多人也想当然的认为,在IM或消息推送等场景下是否也能使用Nginx来解决负载均衡问题? 另外,即时通讯网的论坛和QQ群里也经常有人问起,Nginx是否能支持TCP、UDP、WebSocket的负载
259 4
|
6月前
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
345 37
|
6月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
209 21
|
6月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
194 14
|
6月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
262 11
|
8月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
510 5
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
546 61
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
678 60
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
696 60
|
10月前
|
缓存 负载均衡 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇
通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。
1627 20