nginx反向代理简单实现

前言

上周拼着拼着单词,无意发现一个挺顺的5个字母的词组。不过到现在也没想到有啥寓意,但是看着就是挺顺,而且com域名没被注册,于是我就当仁不让的注册了下来,不为别的,就是因为看着顺。

域名是啥呢?当当当,wiung.com

想了想自己还剩两年多的服务器不能绑定自己的域名就心痛,于是周末再次尝试能不能备案,记得上次备案wjup.top这个域名时,阿里云那边总是提示我身份证和人脸识别不匹配,问客服说的用户口页证明是你自己也可以,这….户口页在 300公里的老家里,我还要回去拿吗,于是就放弃了。但是这次尝试居然可以了,于是按提示一顿操作,把资料都提交了,第二天阿里云的客服给我打电话,是个小姐姐,声音超级好听,爱了爱了。小姐姐说的我的备案网站名称阿杰的学习记录可能不太符合,因为带名字中的字,所以提议换成首字母,心想换就换呗,这个名字也是为了备案通过随便起的。然后今天看着域名已经在管局审核中了,应该没问题了。坐等审核通过。

啰嗦了那么多废话,进入主题。

主题

反向代理

反向代理:说说我的理解,有个场景就是当不同的域名或者同一域名不同二级域名,DNS解析到一个服务器公网IP上,然后达到访问的内容都不一样的效果,比如访问blog.wjup.top是博客,访问bss.wjup.top是论坛。这时候就会用到nginx的反向代理功能。nginx配置代反向代理也是很简单,可以根据server_name的不同反射到内部不同的端口服务上如下图。

启动linux

下面动手实践,由于没有域名可以给我们解析服务器试验,所以这里采用windows的hosts文件和一个linux虚拟机做服务器进行操作,记得刚开始学习时,修改hosts还懵懵逼逼的不太懂有啥用。到了自己买域名解析过DNS时,才发现这玩意在内部也可以当做解析DNS使用,下面一起看看吧。

首先打开我们的虚拟机,装上nginx,这里不再演示安装nginx的步骤。安装好之后,systemctl start nginx启动,systemctl status nginx查看状态,如下状态运行成功。

然后ip addr查看虚拟机的ip,在浏览器打开看看是否能访问nginx默认页面。如果访问没反应,systemctl status firewalld检查防火墙是否未关闭,然后systemctl stop firewalld关闭即可。

修改hosts

ok,启动成功后,修改windows的host文件,随便写几个域名,然后ip写虚拟机的ip。这里在浏览器访问写的域名,就会解析到后面的ip上,所以域名不要写一些常用的域名,避免忘记更改,不能正常访问。我这里写的是我申请的域名后面加了一个v(virtual)

写好后由于虚拟机上的nginx配置文件没更改,访问这几个域名应该是nginx的默认页面,

启动服务

下面修改nginx的配置文件,来进行反向代理,为了起三个不同端口的服务,我新建了一个springboot项目,只有一个默认的mapping,访问时会读取配置文件设置的内容然后显示。

部署的时候可以用这一个jar包,然后把配置文件放到jar包同级目录下,修改不同的端口和配置的内容启动。

我在/opt/server目录下,新建了三个文件夹,server1、server2、server3。文件夹中存放jar包配置文件,然后启动

三个文件夹配置文件端口和内容分别是:

1
2
3
server
port: 9000
show: text=hello-my-server-is-A_port-is-9000
1
2
3
server
port: 9001
show: text=hello-my-server-is-B_port-is-9001
1
2
3
server
port: 9002
show: text=hello-my-server-is-C_port-is-9002

然后先用ip+端口的形式访问试试有没有问题

配置nginx.conf

没问题后开始修改nginx反向代理,在http包裹的大括号内添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# server-A port:9000
server {
listen 80;
server_name s1.wiungv.com;
location / {
proxy_pass http://127.0.0.1:9000;
# index index.html;
}
}

# server-B port:9001
server {
listen 80;
server_name s2.wiungv.com;
location / {
proxy_pass http://127.0.0.1:9001;
}
}

# server-C port:9002
server {
listen 80;
server_name s3.wiungv.com;
location / {
proxy_pass http://127.0.0.1:9002;
}
}

很简单不多解释,然后systemctl restart nginx重启nginx,在浏览器用域名直接访问查看效果。

可能问题

这里可能会有个问题,就是nginx反向代理后访问域名出现502 bad gateway的问题,网上搜索得知是SeLinux的问题.

SeLinux是2.6edition的Linux系统内核中提供的强制访问控制(MAC)系统。算是内置的安全系统,防火墙什么的应该算是外配的。

So:解决方法有两种

关闭SeLinux

  1. 临时关闭(不用重启机器):

    setenforce 0 ##siteSELinux 成为permissive模式

    ##setenforce 1 siteSELinux 成为enforcing模式

  2. 修改配置文件需要重启机器:

    修改/etc/selinux/config 文件

    将SELINUX=enforcing改为SELINUX=disabled

重启机器即可

执行下面的命令

setsebool -P httpd_can_network_connect 1

SUCCESS

然后访问域名再试试。

OK!大功告成!


-------------本文结束感谢您的阅读-------------
感觉文章不错,就赏个吧!
0%