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. 缓存是否命中的检测

例:

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

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










本文转自 安安安安森  51CTO博客,原文链接:http://blog.51cto.com/smallc/1165954,如需转载请自行联系原作者
目录
相关文章
|
17天前
|
网络协议 应用服务中间件 网络安全
Nginx,正向代理
本文介绍了Nginx作为HTTPS正向代理的两种方案:HTTP CONNECT隧道(7层)和NGINX stream(4层)。HTTP CONNECT隧道需要客户端手动配置代理,通过CONNECT请求建立隧道;而NGINX stream则更适合透明代理,利用SNI字段实现流量转发。文章详细讲解了两者的原理、环境搭建、使用场景及常见问题,并提供了配置示例和最佳实践建议。内容转载自阿里云开发者社区@怀知的文章,推荐读者参阅原文获取更多信息。感谢您的阅读!
243 80
Nginx,正向代理
|
21天前
|
存储 应用服务中间件 Linux
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
57 4
|
3月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
227 60
|
3月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
301 60
|
4月前
|
监控 应用服务中间件 测试技术
确保正则表达式在 Nginx 代理中的准确性和稳定性
【10月更文挑战第19天】总之,正则表达式在 Nginx 代理中具有重要作用,但要确保其准确性和稳定性需要付出一定的努力和关注。通过以上方法的综合运用,我们可以提高正则表达式配置的可靠性,为用户提供更好的服务体验。
|
2月前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
190 11
|
2月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
683 7
|
2月前
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
187 13
|
3月前
|
前端开发 应用服务中间件 定位技术
Nginx 如何代理转发传递真实 ip 地址?
【10月更文挑战第32天】
553 5
Nginx 如何代理转发传递真实 ip 地址?
|
3月前
|
负载均衡 前端开发 JavaScript
Nginx 代理多服务
以上是 Nginx 代理多服务的几种常见方式,在实际应用中,可以根据具体的业务需求和系统架构选择合适的代理方式,并结合其他 Nginx 的功能和配置来优化和完善系统的性能和功能。