Nginx反向代理


终于配置好了反向代理,简单记录一下。

一、 概述

  1. 什么是反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。

二、 反向代理服务器的工作原理

  1. 防止web服务器被攻击

如果您的内容服务器具有必须保持安全的敏感信息,如信用卡号数据库,可在防火墙外部设置一个代理服务器作为内容服务器的替身。当外部客户机尝试访问内容服务器时,会将其送到代理服务器。实际内容位于内容服务器上,在防火墙内部受到安全保护。代理服务器位于防火墙外部,在客户机看来就像是内容服务器。 当客户机向站点提出请求时,请求将转到代理服务器。然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器。内容服务器再通过该通道将结果回传给代理服务器。代理服务器将检索到的信息发送给客户机,好像代理服务器就是实际的内容服务器。如果内容服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向 URL。
这样,代理服务器就在安全数据库和可能的恶意攻击之间提供了又一道屏障。与有权访问整个数据库的情况相对比,就算是侥幸攻击成功,作恶者充其量也仅限于访问单个事务中所涉及的信息。未经授权的用户无法访问到真正的内容服务器,因为防火墙通路只允许代理服务器有权进行访问。

原理图

三、博客反向代理免备案方案 + SLL证书

  1. 假设我有两个服务器A和B,服务器A在国外,B在国内,我用A作为代理服务器来转发请求给B。因为B未备案,所以无法直接访问80端口。所以我们在nginx的配置文件中将其端口改为2324

配置如下:

1
2
3
4
5
6
7
8
9
server {
listen 2324 ;
root /var/www/blog/;
server_name _;

location / {
try_files $uri $uri/ =404;
}
}

接着配置服务器A,大体的思路就是在服务器A上配置SSL证书,默认将80端口的访问rewrite到443端口,然后在443端口下进行相关配置。

配置如下:

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
28
29
30
31
server {
listen 80;
server_name blog.lihtao.com;
rewrite ^(.*)$ https://${server_name}$1 permanent; #
}
# HTTPS server
#
server {
listen 443;
#root /var/www/blog;
#index index.html index.htm;

ssl on;
ssl_certificate cert/ssl.pem;
ssl_certificate_key cert/ssl.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

## 反向代理
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
proxy_set_header Host $host;
proxy_set_header X-Forwarder-For $remote_addr;

location / {
proxy_pass http://B服务器IP:2324;
}
}

如果还要进行图片防盗链、公益404等功能的配置,都可以直接在B服务器2324端口下配置。

如果有什么疑问可以留言

Donate comment here
-------------本文结束感谢您的阅读-------------
0%