七层负载均衡之nginx

时间:2021-02-24 05:50:47

一、nginx


1.名词解释
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
2.nginx的安装和部署
所需材料:nginx-1.10.1.tar.gz nginx-sticky-module-ng.tar.gz(静态模块)

  • 安装
[root@server1 ~]# tar -zxf nginx-1.10.1.tar.gz
[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim src/core/nginx.h

修改至如下
七层负载均衡之nginx

[root@server1 nginx-1.10.1]# vim auto/cc/gcc

加上注释,如下
七层负载均衡之nginx
对静态模块进行解包

[root@server1 ~]# tar -zxf nginx-sticky-module-ng.tar.gz

源码安装三步骤,注意,在编译检查过程中检查到需要依赖包pcre-devel openssl-devel zlib-devel

[root@server1 nginx-1.10.1]# yum install pcre-devel openssl-devel zlib-devel -y
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-sticky-module-ng/
[root@server1 nginx-1.10.1]# make
[root@server1 nginx-1.10.1]# make install

ok 安装完成

  • 修改配置文件
[root@server1 nginx-1.10.1]# vim /usr/local/nginx/conf/nginx.conf

修改用户为nginx

七层负载均衡之nginx

events { worker_connections 65535; #修改worker连接数 }
gzip  on;
tcp_nopush      on;
tcp_nodelay     on;

如下图:
七层负载均衡之nginx
为了方便启动,我们给nginx做一个软链接

[root@server1 nginx-1.10.1]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@server1 nginx-1.10.1]# nginx #启动nginx

七层负载均衡之nginx

修改https的相关配置
七层负载均衡之nginx

  • 在系统内做的修改
    1.由于我们在配置文件中设置用户的身份是nginx,但是我们系统中并没有nginx这个用户,所以需要添加
[root@server1 ~]# useradd -u 800 nginx

2.由于我们在配置文件中修改了连接数,但这只是在应用程序层面的修改,我们需要对系统层面上的进行修改

[root@server1 ~]# vim /etc/security/limits.conf
nginx            -       nofile         65535         #在配置文件的末尾添加

以nginx用户身份验证

[root@server1 ~]# su - nginx

七层负载均衡之nginx
3.由于我们在配置文件中做了https的相关配置,所以我们需要制作一个证书,使https生效

[root@server1 ~]# cd /etc/pki/tls/certs
[root@server1 certs]# make cert.pem
[root@server1 certs]# mv cert.pem /usr/local/nginx/conf/ #必须移至改目录下
[root@server1 certs]# nginx -s reload #重新加载,使其生效

配置证书举例:
七层负载均衡之nginx
在浏览器上获取证书
七层负载均衡之nginx
ok~ 至此nginx的安装和配置已经结束
3.nginx的应用

  • 测试一下我们在编译的时候添加的测试模块
更改配置文件
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
#在http语句块中添加以下内容
location /status {
            stub_status on;
            access_log off;
            allow 172.25.70.250;
            deny all;
        }
[root@server1 ~]# nginx -s reload #重新加载使其生效

在浏览器上显示状态信息
七层负载均衡之nginx

  • 作为http服务器
#修改配置文件
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
#在配置文件末尾添加以下内容
server{
        listen 80;    #设置侦听端口
        server_name www.server1.com;   #设置访问的域名
        location /{ 
                root /www1;            #设置默认发布目录
                index index.html;      #设置在默认发布目录的默认发布文件名称
        }
     }

编辑默认发布目录下的默认发布文件

[root@server1 ~]# mkdir /www1
[root@server1 ~]# vim /www1/index.html
<h1>nginx http server</h1>

重启服务,使其生效

[root@server1 ~]# nginx -s reload

在服务器上添加域名解析

[root@server1 ~]# vim /etc/hosts
172.25.70.1   www.server1.com

测试

[root@server1 ~]# curl www.server1.com #成功访问
<h1>nginx http server</h1>
  • 做反向代理服务器
#修改配置文件
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
#在http语句块中添加,配置负载均衡池nginx
upstream nginx{
                server 172.25.70.2:80;   #指定后端的服务器,以及侦探端口
                server 172.25.70.3:8080; #由于nginx属于七层应用,支持端口的转发,所以这里nginx的侦听端口是80,后端的apache服务的侦听端口可以不是80(以8080为例)
}
#在https server的末端添加
server{
        listen 80;
        server_name www.nginx.com;
        location /{
                proxy_pass http://nginx; #将所有请求转发给nginx池的应用处理
        }
     }
 [root@server1 ~]# nginx -s reload #使修改的配置文件生效

Nginx 端口转发实现原理是:用 Nginx 监听 80 端口,当有 HTTP 请求到来时,将 HTTP 请求的 HOST 等信息与其配置文件进行匹配并转发给对应的应用。
对ip为172.25.70.2的server2和ip为172.25.70.3的server3做的配置

#修改server3的httpd服务侦听端口
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf 
Listen 8080;
#为server2和server3编辑默apache默认发布文件
[root@server2 ~]# vim /var/www/html/index.html 
<h1>the page from server2</h1>
[root@server3 ~]# vim /var/www/html/index.html 
<h1>the page from server3</h1>
#启动server2和server3的httpd服务
/etc/init.d/httpd start

为测试机(本例是server1)添加域名解析

[root@server1 ~]# vim /etc/hosts
172.25.70.1  www.nginx.com

测试

[root@server1 ~]# curl www.nginx.com
<h1>the page from server2</h1>
[root@server1 ~]# curl www.nginx.com
<h1>the page from server3</h1>

端口转发成功,实现负载均衡。