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

简介: 转载请保留: 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
下载: 下载 
 
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
10天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
28 0
|
25天前
|
前端开发 应用服务中间件 nginx
使用Docker快速搭建Web服务器Nginx
本文指导如何使用Docker快速搭建Nginx服务器。首先,通过`docker pull`命令获取Nginx镜像,然后以容器形式运行Nginx并映射端口。通过挂载目录实现本地文件与容器共享,便于自定义网页。使用`docker ps`检查运行状态,访问IP:8088确认部署成功。最后,介绍了停止、删除Nginx容器的命令,强调Docker简化了服务器部署和管理。
39 0
|
11天前
|
应用服务中间件 nginx
nginx进行反向代理的配置
在Nginx中设置反向代理的步骤:编辑`/etc/nginx/nginx.conf`,在http段加入配置,创建一个监听80端口、服务器名为example.com的虚拟主机。通过`location /`将请求代理到本地3000端口,并设置代理头。保存配置后,使用`sudo nginx -s reload`重载服务。完成配置,通过example.com访问代理服务器。
18 0
|
1月前
|
弹性计算 算法 应用服务中间件
倚天使用|Nginx性能高27%,性价比1.5倍,基于阿里云倚天ECS的Web server实践
倚天710构建的ECS产品,基于云原生独立物理核、大cache,结合CIPU新架构,倚天ECS在Nginx场景下,具备强大的性能优势。相对典型x86,Http长连接场景性能收益27%,开启gzip压缩时性能收益达到74%。 同时阿里云G8y实例售价比G7实例低23%,是Web Server最佳选择。
|
1月前
|
SQL JSON 应用服务中间件
web后端-win-phpMySql-nginx-web发布
web后端-win-phpMySql-nginx-web发布
|
1月前
|
应用服务中间件 Linux nginx
web后端-linux-nginx-1.18操作命令和部署
web后端-linux-nginx-1.18操作命令和部署
|
1月前
|
安全 应用服务中间件 nginx
|
1月前
|
负载均衡 应用服务中间件 Linux
|
2月前
|
tengine Rust 负载均衡
反向代理学习笔记(一) Nginx与反向代理绪论
反向代理学习笔记(一) Nginx与反向代理绪论
|
3月前
|
负载均衡 应用服务中间件 nginx
nginx-tomcat反向代理以及负载均衡测试
nginx-tomcat反向代理以及负载均衡测试