起因
我在使用dockers 来搭建一个网站时遇到了一个问题,因为我在80端口已经被nginx服务listen,浏览器默认的端口又是80,这样我想在浏览器访问网站时就要加上端口号,这可太不优雅了,我一开始的设想是,更改容器端口映射。但是这样我之后要使用80就又要去重新配置一遍。于是我想到了用nginx的反向代理来优雅的访问,下面是我配置时遇到的一些问题和想法,做一些记录
什么是反向代理
代理这个词我知道,正向代理我也知道,但是反向代理是什么鬼?正向代理是对客户端(client)来进行代理,那么反向代理就是相对于服务端(server)来说,反向代理就是正向代理的相反,我这样理解没错吧。
举几个例子,我们在访问国外网站,睁眼看世界时,想要绕开防火墙就会使用VPN技术,里面就有一种技术叫流量代理,这是代理服务器就会作为客户端,代理我们去访问这些网站,然后把拿到的数据返回给我们,这就是一个正向代理,还有我们去使用的Fidder也使用了代理的技术,Fidder使用代理技术,将服务器反送给客户端的数据拦截,可以理解成Fidder伪装成了客户端从而获取信息,这样就可以对信息做篡改,再返回给真实的客户端。
反向代理就是把服务端的数据做代理,比如我们去访问一个网站时,就拿我最喜欢刷的抖音来说,抖音背后的服务器肯定是成千上万台的,但是对外暴露的域名只有一个,我只能通过这一个域名来访问,当我像抖音发送请求时,会向这个代理服务器发送请求,代理服务器会向真实的服务器发送请求,这样就可以隐藏真实的服务器IP和端口信息了,这里代理的是服务端,这个过程对于客户端是完全透明的。
使用Nginx进行反向代理并配置SSL证书
可以使用 -V 来查看Nginx配置文件的存放路径以及版本和编译参数等信息
# 适用 vim 编辑 halo.conf
vim /etc/nginx/conf.d/halo.conf
upstream halo {
server 127.0.0.1:8090;
}
# 配置一个服务器块
server {
# 配置服务器监听端口 80 和 443 (SSL)
listen 80;
listen 443 ssl;
# 配置服务器名称(域名)
server_name example.com;
# 配置 SSL 证书和密钥的路径
ssl_certificate /path/to/your/cert/example.com.pem;
ssl_certificate_key /path/to/your/cert/cert.key;
# 设置客户端上传文件的最大大小为 1024MB
client_max_body_size 1024m;
# 配置请求的处理位置
location / {
# 将所有请求代理到上游服务器组 halo
proxy_pass http://halo;
# 配置代理头信息
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
listen 80;
和listen 443 ssl;
:配置服务器监听 HTTP 端口80
和 HTTPS 端口443
。server_name example.com;
:配置服务器名称为example.com
。ssl_certificate
和ssl_certificate_key
:配置 SSL 证书和密钥的路径。client_max_body_size 1024m;
:设置客户端上传文件的最大大小为1024MB
。location /
:配置请求的处理位置:proxy_pass http://halo;
:将所有请求代理到上游服务器组halo
。proxy_set_header
:配置代理头信息,包含主机、协议、客户端 IP 和转发的 IP 地址等信息。
可以使用 -t 检查配置文件是否正确,也可用来定位配置文件的位置,检查无误后
# 重载 Nginx 配置
sudo nginx -s reload
这样就完成了这个网站的,反向代理和SLL证书的配置。