杂记 | 使用Nginx进行反向代理

文章目录

  • 01 正向代理与反向代理
  • 02 通过Nginx实现反向代理
    • 2.1 安装Nginx
    • 2.2 编写nginx配置文件
    • 2.3 编写docker-compose(可选)
    • 2.4 启动并访问


01 正向代理与反向代理

正向代理(Forward Proxy)和反向代理(Reverse Proxy)都是计算机网络中的代理服务器,用于在客户端和服务器之间进行数据传输。

  • 正向代理
    正向代理的服务器代理客户端向目标服务器发送请求。
    当客户端发送请求时,请求首先发送到正向代理服务器,然后由代理服务器转发给目标服务器。正向代理服务器可以用于隐藏客户端的真实身份、绕过网络限制或提供缓存等功能。在正向代理的情况下,目标服务器不知道请求的真实来源是客户端,只知道请求来自代理服务器。
  • 反向代理
    反向代理的服务器是代理服务端接收客户端的请求。
    当客户端发送请求时,请求首先发送到反向代理服务器,然后由代理服务器转发给后端的目标服务器。反向代理服务器可以用于负载均衡、安全性增强、缓存静态内容、SSL加密等功能。在反向代理的情况下,客户端并不知道发出的请求具体由哪台服务器处理,只知道请求发向了代理服务器。。

总而言之,正向代理隐藏了客户端的身份,代表客户端发送请求,而反向代理隐藏了服务器的身份,代表服务器接收请求。

02 通过Nginx实现反向代理

本文以Linux的Nginx为例,讲解如何配置Nginx的反向代理设置。

2.1 安装Nginx

有两种安装nginx的方式,一种是直接安装在服务器,另一种是使用docker安装。
直接安装:Linux拾遗 | CentOS7 Linux安装nginx并设置开机自启(步骤操作)
本文使用docker进行安装,简单方便。需要先安装docker和docker-compose。

2.2 编写nginx配置文件

# 进入一个自定义的文件夹 此处以root目录为例
cd ~

# 新建一个nginx.conf配置文件
vim nginx.conf

首先将nginx.conf的默认配置全部粘贴进来,然后在http > server下添加内容。

...
http {
	...
    server {
        listen 80;										# 监听80端口
        server_name www.xxx.com;						# 监听的域名 通常是与本机绑定的域名 也可以写ip地址
        location / {
            proxy_pass http://www.baidu.com;			# 代理的网站 以百度为例
            proxy_set_header Host $host;				# 设置请求头(可选)
			proxy_set_header X-Real-IP $remote_addr;	# 设置真实请求的ip(可选)
        }
    }
}

这样设置好后,访问这台服务器(www.xxx.com)就会被反向代理到目标网站了(www.baidu.com)。
虽然这台服务器只有一个ip,但可以绑定多个域名(例如子域名),在配置的时候 只需要多配置几个server就可以,端口可以相同,域名不同,代理的网站不同。

2.3 编写docker-compose(可选)

如果是docker方式启动,可以选择通过docker-compose的方式启动nginx。

# 文件名为docker-compose.yml
version: '3.3'
services:
    nginx:
        volumes:
            - '/root/nginx.conf:/etc/nginx/nginx.conf'
            - '/root/ssl:/etc/ssl/certificates'		# (可选)开启https的情况下才配置
            - '/root/html:/usr/share/nginx/html'	# (可选)有页面的情况下才配置
        network_mode: host							# 使用宿主机的网络 也可自定义网络映射
        image: 'nginx:stable-alpine-slim'			# 拉取的镜像 这里选择最轻量的版本

2.4 启动并访问

docker-compose.yml所在路径,使用启动命令进行启动。

# 启动nginx
docker-compose up -d

# 关停容器
docker-compose down

# 查看容器日志
docker logs <容器id或容器名>

在本地访问http://www.xxx.com即可。
本文的配置也可用于做端口转发,原理相同,只是被代理的服务器设置为http://127.0.0.1:端口号即可。

你可能感兴趣的:(杂记,nginx,服务器,linux)