开发者社区> 余二五> 正文

Nginx 反向缓存代理外网 SSL 站点

简介:
+关注继续查看

可能用到的参考地址:

cURL for Windows 下载:

http://curl.haxx.se/download/

nginx ssl _module 配置英文参考:

http://auxbuss.com/blog/posts/2011_06_28_ssl_session_caching_on_nginx/

中文的配置nginx ssl _module 的参考:

http://www.cnphp.info/howto-setup-nginx-ssl-reverse-proxy.html

nginx 官方文档 httpSslModule:

http://wiki.nginx.org/HttpSslModule

购买商业 SSL 证书在 nginx 上的配置:

http://zou.lu/nginx-https-ssl-module/

红色部分均为需要根据实际情况修改的内容。

环境:CentOS 5.7, Nginx 1.0.10 Stable

1. 首先编译安装 nginx,参照以往内容,或为了方便起见,可使用 lnmp.org 的一键包;

2. 修改 upgrade_nginx.sh 脚本中的编译参数为:

./configure –user=nginx –group=nginx –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6 –with-http_sub_module –add-module=../ngx_cache_purge-1.4

ngx_cache_purge 的版本自行验证,下载地址为

http://labs.frickle.com/nginx_ngx_cache_purge/

之后,升级 nginx 版本到最新稳定版。

3. 修改源自 lnmp.org  nginx.conf 的默认配置文件,在 http 段末尾添加:

ssl_session_cache shared:SSL:10m;

ssl_session_timeout 10m;

ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

proxy_cache_path /usr/local/nginx/proxy_temp levels=1:2 keys_zone=CACHENAME:10m;

4.  vhost 目录下新建虚拟主机的 nginx 配置文件。

下面是一个例子。这个例子中,将静态内容缓存在 nginx 所在的服务器。

server {  

listen 443 ssl;  

server_name my.ssh.so;  

ssl on;  

access_log /usr/local/nginx/logs/myssh-ssl-access.log;

error_log /usr/local/nginx/logs/myssh-ssl-error.log;


ssl_certificate /usr/local/nginx/conf/ssl/my.ssh.so.crt;  

ssl_certificate_key /usr/local/nginx/conf/ssl/my.ssh.so.key;

keepalive_timeout 60;  


if ($http_Cache_Control = "no-cache") {

       rewrite ^(.*)$ /purge$1 last;

}


location ~ /purge(/.*)

{

       proxy_cache_purge CACHENAME $host$1$is_args$args;

       # Press Ctrl+F5 to purge the proxy_cache manually;

}


location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {

       proxy_buffering on;

       proxy_pass https://46.21.169.60;

       # Most PHP, Python, Rails, Java App can use this header info:

       proxy_set_header X-Forwarded-Proto https;

       proxy_cache CACHENAME;

       proxy_cache_key $host$uri$is_args$args;

       proxy_cache_valid 200 302 1h;  

       proxy_cache_valid 301 1d;  

       proxy_cache_valid any 1m;  

add_header Nginx-Cache-Status "$upstream_cache_status - from nginx_cache";

}


location / {

       proxy_redirect off;

       proxy_pass https://46.21.169.60;

       proxy_set_header Host $host;

       proxy_set_header X-Real-IP $remote_addr;

       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

       proxy_set_header X-Forwarded-Proto https;

add_header No_Cache "$upstream_cache_status - This page will not be cached.";

}

}  

5. proxy_cache_purge  ACL

由于安全考虑,一般不可能让所有人都能有权限 purge cache,而且 purge 的界面也并不友好。

例:

location ~ /purge(/.*)

{

       allow 127.0.0.1;

       allow 221.221.21.112;

       deny all;

       proxy_cache_purge CACHENAME $host$1$is_args$args;

}

至于 Purge 页面的修改,可以自行修改 ngx_cache_purge 的源码,在此不再细述,况且如果限制了一般客户无法 purge,就根本不需要修改。


6. 附:自签署证书的生成

生成 key:

openssl genrsa -des3 -out my.ssh.so.key 1024

生成 csr:

openssl req -new -key my.ssh.so.key -out my.ssh.so.csr

取消重启 nginx 时会要求输入密钥的提示:

cp my.ssh.so.key my.ssh.so.key.org

openssl rsa -in my.ssh.so.key.org -out my.ssh.so.key

生成最终签署的 crt:

openssl x509 -req -days 365 -in my.ssh.so.csr -signkey my.ssh.so.key -out my.ssh.so.crt


7. 缓存是否命中的检测

例:

121511_0617_Nginx1.png

-k 参数为忽略 SSL 证书的可信性验证。Miss/Hit 的文字说明可以参见第4部分的具体配置部分。

从上述结果可看出,第一次访问时缓存 MISS,第二次就成功 HIT 了。有兴趣的话还可以在浏览器中打开此链接,purge 之后再次用 curl -I 测试。










本文转自 安安安安森  51CTO博客,原文链接:http://blog.51cto.com/smallc/1230677,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞
使用Nginx 让IIS和Tomcat等多个站点一起飞   前言:   养成一个好习惯,解决一个什么问题之后就记下来,毕竟“好记性不如烂笔头”。   这样也能帮助更多的人 不是吗?      最近闲着没事儿瞎搞,自己在写一个ASP.NET MVC的系统,所以理所当然的 在服务器上搭建了一个IIS。
2709 0
Nginx惊现漏洞 百万网站面临“拖库”风险
据瑞星互联网攻防实验室近日出具的一份报告显示,国际知名的服务器Nginx存在缓冲区溢出漏洞,目前利用该漏洞进行网络攻击的恶意程序已经在互联网上出现。届时,使用Nginx服务器的互联网平台将面临用户信息被盗、商业机密泄露等危险。
1392 0
iis站点 asp.net网站访问弹出提示框
www.lovegarden.cc 这个网站已经出现2次这种情况了。 访问,弹出提示框,需要输入用户名和密码。 解决方法: 在用户组里新建一个用户,test002,密码,密码永不过期。 在iis站点,权限里添加该用户。“允许匿名访问”,用户选择 test002。 ok了。
621 0
+关注
20380
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载