反向代理设置

折腾家庭服务器,因只有一个公网ip,还要尝试设置私有云,博客,论坛,以及练习flask编程,又不想写各种端口访问,计划采取的方案是设置一个反向代理,使用子域名访问各个服务。

一、什么是反向代理

1.1 正向代理与反向代理

代理是客户端与服务器之间的桥梁,当客户端与服务器不方便直接连接时代理双方之间的连接。

代理可分为正向代理与反向代理。

正向代理代理客户端,当某些网站无法访问时,就可以设置一个代理服务器,帮助客户端获取需要的数据。

反向代理设置_第1张图片

反向代理是指以代理服务器接收请求,然后转给真正的服务器处理,客户端对具体访问的服务器是无感知的。

反向代理设置_第2张图片

简单来讲:正向代理代理客户端,反向代理代理服务器

1.2 反向代理的作用

主要有以下作用:

  • 负载均衡

  • 动静分离

  • 安全防护

二、网络配置方案

申请了公网ip,使用自己的路由器拨号,设置端口转发,经测试80端口可用。

2.1 域名

购买腾讯云dnspod域名一个,根据需要设置三级域名,只配置A记录,所有域名都配置到同一个公网ip上。

使用dnspod提供的api2.0获取和设置域名ip,ip变化时自动修改dns设置。脚本设置定期运行。

2.2 端口转发

web应用仅需要将外网80端口转发到内网代理服务器的80端口,在该服务器启动一个docker提供nginx反向代理功能,转发到内网的其它电脑或者容器。

三、Nginx反向代理配置

nginx主要通过配置文件控制各项功能。

3.1 nginx配置文件

3.1.1 nginx配置文件位置

一般通过apt安装的nginx配置文件在/etc/nginx/nginx.conf,配置文件内有include语句包含/etc/nginx/conf.d文件夹内的*.conf文件。

如果是编译方式安装的可能在/usr/...目录下。

如果不确定,可以通过nginx -t来查看配置文件位置。

3.1.2 nginx配置文件结构

  1. 全局块。从配置文件开始到events块之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令,主要包括:配置运行Nginx服务器的用户(组)、允许生成的 worker process 数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。

  1. event块。events 块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括:是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。

  1. http块。这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分中配置。

3.1.3 http块

http块由http全局块和server块构成。

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。而每个server块也分为全局server块,以及可以同时包含多个locaton块。(☆☆☆☆☆)

  • http 全局块:http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

  • server 块:这块和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

  • server块可以设置监听端口,如果都监听80端口,一个请求进到nginx后,nginx根据域名不同来确定那个server块来处理请求。

3.1.4 server块

server块由server全局块和location块(可以多个)构成,

  1. server全局块。其中主要配置server_name.

Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了。

注:nginx反向代理同一ip多个域名,给header加上host就可以了

server_name的匹配顺序

Nginx中的server_name指令主要用于配置基于名称虚拟主机,server_name指令在接到请求后的匹配顺序分别为:

(1)准确的server_name匹配,例如:

server { 
listen 80; 
server_name ssdr.info www.ssdr.info; 
} 

(2)以*通配符开始的字符串:

server { 
listen 80; 
server_name *.ssdr.info; 
} 

(3)以*通配符结束的字符串:

server { 
listen 80; 
server_name www.*; 
} 

(4)匹配正则表达式:

server { 
listen 80; 
server_name ~^(?.+).howtocn.org$; 
} 

  1. location块

一个 server 块可以配置多个 location 块。

这块的主要作用是:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

3.2 nginx实际配置

你可能感兴趣的:(linux,服务器,运维)