SSL/TLS 卸载(offloading/termination) -- 利用 nginx
2017-11-04 11:27
1576 查看
写在前面
本文主要涉及* openssl 生成证书
* nginx 配置 SSL Offloading
* X-Forwarded-For
* nginx 日志
至于SSL/TLS是怎么被卸载的呢? SSL/TLS 卸载(offloading/termination) – C语言 + openssl 实现 一文给了一个demo, 仅供参考.
本人对相关知识理解并不深入, 仅为满足个人好奇心, 可能存在描述或解释错误的地方, 文章内容仅供参考!
环境
http server (nginx): 172.16.1.141ssl offloader(nginx): 172.16.1.199
client/browser: 172.16.1.206
系统均是
CentOS 7
http server(nginx)
172.16.1.141上使用nginx作为http server, 配置这里就省略了
网站由一个简单的html文件和一个文本文件构成, 之所以加一个文本文件, 是为了观察
browser连续发送两个请求.
$ cat html/index.html <html> <img src="/test.txt" alt="test" /> </html> $ cat html/test.txt hello world!
请忽略文本文件的引用为什么在html中用的是
img标签
ssl offloader(nginx)
172.16.1.199上, 生成证书$ openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
172.16.1.199上, nginx配置
$ cat /etc/nginx/nginx.conf http { ... upstream mywebapp1 { server 172.16.1.141; # http server(也是使用的nginx) } server { listen 80; listen 443 ssl; server_name example.com www.example.com; # 启用SSL # cert.pem, key.pem是前面步骤生成的 ssl on; ssl_certificate /etc/nginx/ssl/example.com/cert.pem; ssl_certificate_key /etc/nginx/ssl/example.com/key.pem; # Ignore the ssl_trusted_certificate directive if you are using self-signed certificates. # ssl_trusted_certificate /etc/nginx/ssl/example.com/ca-certs.pem; root /usr/share/nginx/html; location / { proxy_pass http://mywebapp1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # offloader(nginx) 会向http header 中添加 X-Forwarded-For 字段 proxy_set_header X-Forwarded-Proto $scheme; } ... } ... }
测试
172.16.1.206 上浏览器访问 https://172.16.1.199或者使用
curl
172.16.1.141 上查看nginx(http server) 日志
172.16.1.141 $ cat /var/log/nginx/access.log 172.16.1.199 - - [03/Nov/2017:14:59:50 +0800] "GET / HTTP/1.1" 200 78 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" "172.16.1.206" 172.16.1.199 - - [03/Nov/2017:14:59:50 +0800] "GET /test.txt HTTP/1.1" 200 13 "https://172.16.1.199:4433/" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" "172.16.1.206"
行首的
172.16.1.199是
offloader的IP, 因为, 对于
http server, TCP连接的源端是
offloader
行尾的
172.16.1.206是
browser的IP, 这是怎么来的呢?
offloader收到请求后, 在向
http server转发时, 会向
http header中添加
X-Forwarded-For: 172.16.1.206以告诉
http server这个连接是从哪来的. 最后
http server将”真正的”源端IP记录到日志中
相关文章推荐
- SSL/TLS 卸载(offloading/termination) -- C语言 + openssl 实现
- 利用SSL/TLS中的SNI同一ip不同域名的F5vs配置解决方案
- 利用tomcat服务器配置https双向认证、https单向认证-ssl、tls
- 利用tomcat服务器配置https双向认证、https单向认证-ssl、tls
- 利用tomcat服务器配置https双向认证、https单向认证-ssl、tls
- 阿里云Center OS 6.2 Nginx 配置 SSL/TLS HTTPS配置
- nginx 安装 卸载 开启ssl
- 如何在Nginx上启用SSL和TLS 1.3
- Nginx+HTTPS(SSL/TLS)
- 微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
- Nginx SSL Termination
- 如何利用TLS/SSL与防火墙规则保护CoreOS集群
- 【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
- nginx实现SSL卸载
- nginx高级应用--------搭建https(SSL/TLS)
- centos中编译安装nginx并支持ssl
- 利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
- "请求被中止: 未能创建 SSL/TLS 安全通道"解决办法
- 用OpenSSL编写SSL,TLS程序
- MINA、Netty、Twisted一起学(十一):SSL/TLS