Nginx反向代理/负载均衡/SSL配置

来源:https://blog.csdn.net/Powerful_Fyphp

什么是反向代理?linux

一、有两台服务器A和B属于同一内网段,可是A不通外网,B通外网,客户端C只有外网 二、C想经过B访问A,就须要在服务器B上作反向代理 三、客户端C经过外网与服务器B通讯,服务器B经过内网转发客户端C的请求与服务器A通讯。nginx

测试场景:web

服务器A 内网IP地址:192.168.234.128 部署了上一篇文章中的bbs网站 服务器B 内网IP:192.168.234.130 外网IP:192.168.111.128 客户端C 外网IP:192.168.111.101centos

需求:浏览器

客户端C能访问到服务器A的bbs网站服务器

1.测试客户端C与服务器B经过外网通讯:负载均衡

在这里插入图片描述

#客户端C与服务器B的能够经过外网通讯curl

2.新建并编辑服务器B的nginx虚拟主机配置文件:测试

[root@centos02 ~]# vi /etc/nginx/conf.d/nginx_proxy.conf

添加以下内容:

server
{
        listen 80;
        server_name test.bbs.com;

        location /
         {
            proxy_pass http://192.168.234.128;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
}

server_name:服务器A的bbs网站域名(虚拟主机$host) proxy_pass http:服务器A的IP地址 proxy_set_header:代理来源IP和访问网站的客户端IP(如不配置,服务器A的nginx访问日志的来源IP将全是服务器B的IP地址)

3.从客户端C访问服务器A的bbs网站:

修改Windows系统C:\Windows\System32\drivers\etc\hosts文件:

在这里插入图片描述

#因为服务器A的bbs网站域名test.bbs.com为自定义域名,因此须要在客户端C修改hosts文件,使浏览器访问test.bbs.com网站是指向到服务器B的外网地址

客户端C打开浏览器访问test.bbs.com:

在这里插入图片描述

#已成功打开bbs网站页面,nginx反向代理配置完成

4.查看服务器A的nginx访问日志:

[root@linux nginx]# tail -1  access.log
192.168.234.130 - - [17/Oct/2019:16:43:29 +0800] "GET /favicon.ico HTTP/1.0" 200 5558 "http://test.bbs.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "192.168.111.1"

#来源IP192.168.234.130,真实IP:192.168.111.1

补充:

因为测试的客户端C和服务器B属于同一内网,因此真实IP显示的是192.168.111.0/24网段的网关,演示须要,将客户端C与服务器B的网段虚构成外网,因此两个不想通的内网段,也能够经过该方法配置nginx反向代理

什么是负载均衡?

当一个域名指向多台web服务器时,添加一台nginx负载均衡服务器,经过nginx负载均衡便可未来自于客户端的请求均衡的发送给每台web服务器,避免单台服务器负载太高而其他服务器较为空闲的不均衡状况出现

配置nginx负载均衡:

在nginx机器上新建配置文件:

[root@centos02 ~]# vi /etc/nginx/conf.d/test.conf

添加以下内容:

upstream test
    {
        ip_hash;  
        server 192.168.0.10:80 weight=100; 
        server 192.168.10.10:80;
    }
    server
    {
        listen 80;
        server_name www.test.com;
        location /
        {
            proxy_pass http://test;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

upstream:负载均衡配置 apelearn:自定义名,用于server{}中proxy_pass引用 ip_hash:将同一客户端的全部请求发送给同一服务器(如不发送给同一服务器,有可能出现客户端刚登录网站,点击其余子页面又提示登录) server:web服务器地址 weight:定义权重(范围0-100),负载均衡服务器优先将请求发送给权重大的web服务器 server_name:访问网站的域名 proxy_pass:引用upstream定义的名称

验证nginx配置并重载:

[root@centos02 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@centos02 ~]# nginx -s reload

接下来修改客户端hosts文件将测试的域名www.test.com指向到测试的nginx负载均衡机器的IP便可访问www.test.com网站。

nginx配置SSL证书实现经过https协议访问网站:

SSL证书申请网站:

1.https://www.wosign.com/ 2.https://freessl.cn/(免费)

#经过浏览器生成后,须要在服务器建立证书文件

建立证书文件:

[root@linux ~]# mkdir /etc/nginx/ssl
[root@linux ~]# cd !$
cd /etc/nginx/ssl
[root@linux ssl]# touch ca
[root@linux ssl]# touch test.crt
[root@linux ssl]# touch test.key

#将证书申请网站提供的对应证书的内容添加到ca/ .crt/ .key文件中便可

编辑nginx配置文件:

[root@linux ~]# vi /etc/nginx/conf.d/bbs.conf

添加以下内容:

listen       443 ssl;
server_name  test.bbs.com;
ssl on;
ssl_certificate /etc/nginx/ssl/test.crt;     #定义.crt文件路径
ssl_certificate_key /etc/nginx/ssl/test.key;   #定义.key文件路径
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

验证配置并重载nginx:

[root@linux ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@linux ~]# nginx -s reload

#接下来访问网站地址栏便可显示HTTPS

curl验证方式:

curl -k -H "host:test.bbs.com" https://192.168.234.128/index.php

#host:域名,https:// webserver IP,输出结果为网站页面标签信息即表示成功

相关文章
相关标签/搜索