Nginx反向代理与缓存配置

有时候需要用Nginx在内网部署反向代理给内网的程序访问外网内容,并设置一定时间的缓存,记录一下。

http缓存配置

一般Nginx的http和server是分开配置的,所以先在http的配置中添加缓存路径

也就是添加cache path,放在http中:

1
proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=cache_one:20m max_size=1g;

server配置

也就是vhost配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;

server_name www.another.net;

index index.html;

location / {
proxy_pass https://www.source.com/;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
}
}

一般200或者302都是正常的,所以可以缓存24小时,如果经常变化可以设置短一点,404的话只缓存一分钟。

重载配置

1
nginx -s reload 

这样就可以在本地服务器通过访问 http://www.another.net 来代理 https://www.source.com

本地SSL证书配置

如果需要本地通过https访问的话需要配置一个本地SSL证书,服务器需要安装openssl环境。

SSL证书生成

生成秘钥key,运行:

1
openssl genrsa -des3 -out server.key 2048

会有两次要求输入密码,输入同一个即可

输入密码

然后你就获得了一个server.key文件.

以后使用此文件(通过openssl提供的命令或API)可能经常回要求输入密码,如果想去除输入密码的步骤可以使用以下命令:

1
openssl rsa -in server.key -out server.key

创建服务器证书的申请文件server.csr,运行:

1
openssl req -new -key server.key -out server.csr

其中Country Name填CN,Common Name填主机名也可以不填,如果不填浏览器会认为不安全.(例如你以后的url为https://abcd/xxxx….这里就可以填abcd),其他的都可以不填.

创建CA证书:

1
openssl req -new -x509 -key server.key -out ca.crt -days 3650

此时,你可以得到一个ca.crt的证书,这个证书用来给自己的证书签名.

创建自当前日期起有效期为期十年的服务器证书server.crt:

1
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

ls你的文件夹,可以看到一共生成了5个文件:

1
**ca.crt**  **ca.srl**   **server.crt  server.csr**  **server.key**

其中,server.crt和server.key就是Nginx需要的证书文件。

最后Nginx配置修改如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 80;
listen 443 ssl;

server_name www.another.net;

ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;

index index.html;

location / {
proxy_pass https://www.source.com/;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
}
}

重载配置

1
nginx -s reload 

这样就可以访问 https://www.another.net 了。