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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月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
下载: 下载 
 
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
17天前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
108 59
|
8天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
nginx配置反向代理404问题
|
29天前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
134 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
13天前
|
负载均衡 算法 应用服务中间件
Nginx 常用的负载均衡算法
【10月更文挑战第22天】不同的负载均衡算法各有特点和适用场景。在实际应用中,需要根据具体的业务需求、服务器性能和网络环境等因素来选择合适的算法。
20 3
|
17天前
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
|
26天前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
113 7
|
24天前
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
27天前
|
缓存 负载均衡 算法
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个通用的 TCP/UDP 代理服务器,以及一个邮件代理服务器和通用的 HTTP 缓存服务器。
56 0
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
|
1月前
|
开发框架 负载均衡 前端开发
Nginx负载均衡
Nginx负载均衡
|
1月前
|
负载均衡 Java 应用服务中间件
Nginx负载均衡配置
Nginx负载均衡配置