分分钟搞懂并实现Nginx反向代理!
前言:本篇文章涉及的的知识点有:CentOS7基本命令、docker常用操作、容器数据卷、端口绑定和域名绑定、反向代理,如果与本文使用的是不同操作系统以及不同方法也没有关系,可以通过观看文章目录来了解反向代理大致需要哪些步骤。
1、概念
在实现反向代理之前,我们首先要知道什么是正向代理,通过他们之间的差异来理解其作用
1.1、正向代理
如图所示:
不难看出,在上面的例子中,局域网内的PC机将请求发送给代理服务器,然后代理服务器再将请求转发至Internet
1.2、反向代理
不难看出,上面的例子中,从Internet过来的请求会首先经过代理服务器,然后再根据代理服务器来判断返回哪一个网站
1.3、两者对比
类型 | 区别 |
---|---|
正向代理 | 代理客户端,统一转发请求 |
反向代理 | 代理服务器端,统一分配请求 |
2、Nginx代理服务器
2.1、安装Nginx镜像
1.搜索nginx镜像
docker search nginx
2.拉取nginx镜像(再次之前需要通过配置源来提高docker下载镜像的速度,具体请自行百度)
docker pull nginx
2.2、准备Nginx相关配置
1.在 /root目录下创建nginx目录,用于存储nginx数据信息
mkdir ~/nginx
2.进入目录
cd ~/nginx
3.nginx目录下创建conf.d目录(用于存放反向代理相关的配置文件)
mkdir conf.d
4.conf目录下创建配置文件nginx.conf(两个方法二选一)
vi nginx.conf
或
vim nginx.conf
5.添加如下配置内容
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
7.nginx目录下创建conf目录(存放nginx配置信息)
mkdir conf
8.conf.d目录下创建proxy.conf配置文件(反向代理相关配置)
upstream tomcat-test {
server 192.168.181.5:8080;
}
server {
listen 80; #port
server_name www.proxy.com; #host
location / {
proxy_pass http://tomcat-test;
index index.html;
}
}
配置文件解释说明(ip需要根据自己虚拟机的ip来进行更改):
2.3、创建容器
1.创建容器,并设置端口、目录映射(在nginx目录下)
docker run -id --name=c_nginx \
-p 80:80 \
-p 81:81 \
-p 82:82 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
稍微解释一下上面的配置文件:
-p
命令的作用是将虚拟机的端口与容器的端口进行绑定
-v
命令的作用是使虚拟机与容器共享同一个目录,$PWD
表示当前目录,被共享的目录是在虚拟机中的,并不是在容器中(可以学习一下数据卷的相知识)
3、Tomcat测试服务器
3.1、安装镜像
1.搜索tomcat镜像
docker search tomcat
2.拉取tomcat镜像
docker pull tomcat
3.2、创建tomcat容器以及目录
1.在/root目录下创建tomcat目录(用于存放html文件)
mkdir ~/tomcat
cd ~/tomcat
2.创建并编辑index.html文件(一会儿用于展示的html页面)
vi index.html
输入一下测试内容
this is index.html port=8080!!!!
3.创建容器,设置端口、目录映射
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
4、 主机进行域名映射的相关配置
如下图:
现在我们想要的是通过 www.proxy.com
这个域名来访问nginx代理服务器,代理服务器的ip地址是192.168.181.5
,为了使浏览器能够识别这个域名,我们需要在电脑的配置文件中进行设置
本文以weindows操作系统为例,其他操作系统需自行百度
windows系统的域名映射文件是C:\Windows\System32\drivers\etc
目录下的hosts
文件
文件中添加如下信息:
192.168.181.5 www.proxy.com
hosts文件在作用相当于一个DNS服务器,把你发送的www.proxy.com
解析成192.168.181.5
这个ip地址
5、测试效果
重启tomcat以及nginx
docker restart c_nginx
docker restart c_tomcat
访问www.proxy.com后可以看到如下效果
创作不易,若有收获还请点赞鼓励一下,若有问题还请指出,共同进步,共同学习~ ^_^