Nginx负载均衡服务器入门案例

不言
发布: 2023-03-23 08:42:02
原创
1375 人浏览过


最近有空,学习了一下nginx,做了个简单的入门案例。

简介:

Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

普通的客户端访问服务器的模式就是直接访问,有nginx服务器,我们可以把相同的应用部署到不同的服务器,访问模式如下:这样极大地提高并发能力,减轻了服务器的压力,提高了性能。

普通的访问模式:



Nginx访问模式:


优势:

作为 Web 服务器:相比 ApacheNginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

 

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

 

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

 

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。

安装:

Linuxwindows版本,根基自己需要安装相应的。我自己以windows为例:

下载安装包http://nginx.org/en/download.html

解压,点击nginx.exe运行就可以启动服务,在浏览器输入localhost(默认监听127.0.0.1:80)进入以下页面则说明nginx服务器启动成功。


Demo

我自己搭了一个springboot的简单项目,部署到了不同的端口下(可以部署到不同的服务器)。为了方便测试,输出的内容我做了简单的区分:


配置详解:

注:conf / nginx.conf nginx 的默认配置文件。你也可以使用 nginx -c 指定你的配置文件

#运行用户
#user  nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes  1;

#全局错误日志
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#PID文件,记录当前启动的nginx的进程ID
#pid        logs/nginx.pid;

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

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

    #设定日志
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;
    #tcp_nopush     on;

    #连接超时时间
    keepalive_timeout  65;

    #gzip压缩开关
    #gzip  on;
	
    #设定负载均衡的服务器列表(或者一个反向代理服务器,一个的话不需要分配权重)
    upstream hello_server {
        #weigth参数表示权值,权值越高被分配到的几率越大
        server 127.0.0.1:8888   weight=1;
        server 127.0.0.1:8899   weight=3;
    }

    server {
        #监听80端口,80端口是知名端口号,用于HTTP协议
	listen       80;
	#定义使用localhost访问
        server_name  localhost;

        #编码格式
	charset utf-8;

        #access_log  logs/host.access.log  main;
		
	#反向代理的路径,location 后面设置映射的路径
	#对所有请求进行负载均衡请求(和upstream绑定)
        location / {
            root        /root;                 #定义服务器的默认网站根目录位置
            index       index.html index.htm;  #定义首页索引文件的名称
            proxy_pass  http://hello_server;   #请求转向hello_server 定义的服务器列表

            #以下是一些反向代理的配置(可选择性配置)
            #proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_connect_timeout 90;          #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 90;             #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 90;             #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size 4k;              #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size 64k;       #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k;    #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            
            client_max_body_size 10m;          #允许客户端请求的最大单文件字节数
            client_body_buffer_size 128k;      #缓冲区代理缓冲用户端请求的最大字节数
        }

}
登录后复制

配置好之后重启nginx服务器,访问localhost

重启命令: nginx -s reload

访问的还是nginx(localhost)服务器,但实际上访问的是部署的springboot项目(localhost:8899)。再刷新几次就可以看到下图,说明两个端口上部署的服务都被访问到了。


注:两个服务分配的权重值不一样,所以出现hello world b!!!(实际访问localhost:8899)的可能性大些,出现hello world a!!!(实际访问localhost:8888)的可能性小一点。你可以自己修改权限值,再多测试几次!

总结:

Nginx常用命令:



相关推荐:

使用Nginx避免ajax的跨域请求

nginx反向代理机制解决前端跨域问题


以上是Nginx负载均衡服务器入门案例 的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!