nginx ssl加密代理配置指南

转载:http://www.cnblogs.com/analyzer/articles/1668993.html

 

使用nginx加密代理利用基于ssl的传输增强安全性,而且可以不用写程序实现用户认证,实用性很强。

首先编译安装:

我用的是debian testing,要先装好pcre,然后编译安装:

./configure --prefix=/home/nginx --with-md5=/usr/lib --with-sha1=/usr/lib --with-cc-opt="-I /usr/include/pcre -I /usr/include/openssl" --with-http_ssl_module

make -j10
make install

假如用的不是debian,openssl可能要自己编译安装,下载:

wget http://www.openssl.org/source/openssl-0.9.8k.tar.gz
tar -zxvf openssl-0.9.8k.tar.gz
cd openssl-0.9.8k
./config
make
make install

这样安装后openssl会被安装到/usr/local/ssl/目录下,如无特殊必要,就不要想方设法覆盖系统本身的openssl,否则可能会造成openssh连不上,那就麻烦大了。

nginx的编译参数也要相应修改:

./configure --prefix=/home/nginx --with-md5=/usr/lib --with-sha1=/usr/lib --with-cc-opt="-I /usr/include/pcre -I /usr/local/ssl/include/openssl" --with-http_ssl_module

make -j10
make install

配置

1、ssl使用443端口,不是80,修改listen

listen 443;#ssl端口
listen 80;#用户习惯用http访问,加上80,后面有配置让它自动跳到443端口

2、配置ssl

完整示例:

upstream test.com {
server 192.168.1.2:80;
}
server {
server_name test.com;
include port.conf;

ssl on;
ssl_certificate server.crt; # ${nginx_install_dir}/conf/server.crt
ssl_certificate_key server.key; # ${nginx_install_dir}/conf/server.key
error_page 497 "https://$host$uri?$args";

location / {
        proxy_pass http://test.com;
        include proxy.conf;#
        auth_basic "status";
        auth_basic_user_file trac.passwd;
}

}

其中分为两段:

第一段:

ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
error_page 497 "https://$host$uri?$args";

1/开启ssl,server.crt和server.key是用keygen.sh生成,对应${nginx_install_dir}/conf/server.crt和${nginx_install_dir}/conf/server.key。

2/keygen.sh下载后执行sh keygen.sh就可以在/etc/apache_ssl/下生成server.crt和server.key,拷到nginx的conf目录下就好了。

3/error_page 497那句话是令http请求自动跳到https,例如http://test.com/asdf.html?a=1会自动302跳转到https://test.com/asdf.html?a=1。

第二段:

proxy_pass https://test.com;
include proxy.conf;
auth_basic "status";
auth_basic_user_file trac.passwd;

1/proxy_pass https://test.com;注意这里是http,https也可以代理得过去,https默认是用443端口的,在upstream里配置就是了。

2/proxy.conf在proxy.conf

3/auth_basic "status";指定认证方式为htpasswd类型,auth_basic_user_file指定password文件为trac.passwd,对应${nginx_install_dir}/conf/trac.passwd。

4/htpasswd是apache里的一个小工具,apt-get install apache2-utils后可以得到它,或者干脆就在这里创建:http://sudone.com/htpasswd.php,把生成结果贴到trac.passwd里就可以了。

  新建一个htpasswd:
  htpasswd -c trac.passwd username
  加用户:
  htpasswd trac.passwd username

配置完之后访问https://test.com,先弹出一个证书框,然后弹出一个用户密码填写框,填入trac.passwd中的用户名和密码,就可以访问了。

访问http://test.com,多一步跳转,效果一样。

-----------------------------------------------------------

最近配通了nginx和CNNIC的ssl证书,这种证书为可信任机构颁发,它除了server.crt和server.key外,还需要有一个root.crt来做第三方认证,以证明server.crt和server.key是正规颁发的,没有经过伪造。

从前有段时间因为测试nginx和CNNIC的证书未能测通,最后还是用了apache,最近问了网易通行证的同事,学习到了这个配法。

其实很简单,安装和配置文件都一样,就是证书方面有一点点问题罢了。

在apache中配置有三段,是CNNIC给出的标配:

SSLCertificateFile /etc/apache2/ssl/server.cer
SSLCertificateKeyFile /etc/apache2/ssl/server.key
SSLCertificateChainFile /etc/apache2/ssl/CNNIC.cer

其中文件server.key,就是nginx的server.key;server.cer+CNNIC.cer就是nginx的server.crt。

server.key基本不用修改变化,留意下第一行和最后一行:
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
要保持完整

server.crt就是两个文件的合并:
cat CNNIC.cer >> server.cer
mv server.cer server.crt

最后一个问题是最致命的了,也是我一直测不成功的原因,看图:

要保持-----BEGIN CERTIFICATE-----这些东东的正确格式,这样才能成功。

时间: 2024-10-30 20:53:01

nginx ssl加密代理配置指南的相关文章

Nginx服务器初期基本配置指南_nginx

一.准备pcre,有关正则表达式匹配:zlib,用于压缩.这些就不细说了,如果要安装最简版的nginx,记得准备好这两样东西就好了. 用root账户启动服务是比较危险的!  前段时间,测试服务器被黑掉了,终归到底是通过一个root启动的服务上传了木马,最后连ssh都屏蔽了,活生生成为一台肉鸡... 所以,惨痛的经验告诉我,一定要为服务建立对应的组和用户,限制访问权限,降低风险!  这里为nginx建立一个www组,并建立一个不登录的账户nginx: #追加一个www组 groupadd -f w

Nginx服务器的SSL证书配置以及对SSL的反向代理配置_nginx

Nginx的SSL证书配置 1.使用openssl实现证书中心由于是使用openssl架设私有证书中心,因此要保证以下字段在证书中心的证书.服务端证书.客户端证书中都相同 Country Name State or Province Name Locality Name Organization Name Organizational Unit Name Country Name State or Province Name Locality Name Organization Name Org

nginx配置ssl加密(单/双向认证、部分https)

nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始采用的是全站加密,所有访问http:80的请求强制转换(rewrite)到https,后来自动化测试结果说响应速度太慢,https比http慢慢30倍,心想怎么可能,鬼知道他们怎么测的.所以就试了一下部分页面https(不能只针对某类动态请求才加密)和双向认证.下面分节介绍. 默认nginx是没有安装ssl模块的,需要编译安装nginx时加入--with

nginx环境下配置ssl加密(单双向认证、部分https)_nginx

nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始采用的是全站加密,所有访问http:80的请求强制转换(rewrite)到https,后来自动化测试结果说响应速度太慢,https比http慢慢30倍,心想怎么可能,鬼知道他们怎么测的.所以就试了一下部分页面https(不能只针对某类动态请求才加密)和双向认证.下面分节介绍. 默认nginx是没有安装ssl模块的,需要编译安装nginx时加入--with

Nginx+SSL+Node.js运行环境配置教程_nginx

Nginx是一款高性能的HTTP服务器,同时也是一款高效的反向代理服务器.不像传统的服务器,Nginx是基于事件驱动的异步架构,内存占用少但是性能很好.如果你的Web应用是基于Node.js的,那么建议你考虑使用Nginx来做反向代理,因为Nginx可以非常高效地提供静态文件服务.本文的主要内容是在不同的操作系统下配置Nginx和SSL,并且搭建一个Node.js运行环境. 安装Nginx 假设你已经在服务器上安装了Node.js,下面我们来安装Nginx. 在Mac系统上安装Nginx 利用c

Nginx单IP地址配置多个SSL证书的方法

Nginx单IP地址配置多个SSL证书的方法 默认情况下,Nginx一个IP地址仅支持一个SSL证书,需要多个IP地址才能配置多个SSL证书,在公网IP地址有限的情况下,可以使用TLS Server Name Indication extension(SNI, RFC 6066),它允许浏览器在SSL握手的时候发送请求的server name,也就是 Host,这样 Nginx 就能找到对应server 的SSL配置. 配置步骤如下: 1.检查Nginx是否支持TLS $ nginx -V ..

【整理】自动的 Nginx 反向代理配置

本文内容参考自< 自动的 Nginx 反向代理配置 >.  个人觉得:名字翻译成<自动化 Nginx 反向代理配置>更为贴切.  [一句话总结] 介绍了如何构建一个能够自动化配置 nginx 反向代理的方式.即将后端服务的部署与前端 nginx 的配置更改进行解耦.  [知识点]  对于 API 的使用者来说所有操作都是在同一个 URL 空间里进行的,而实际上是根据 URL 中不同的顶级"段"来进行路由的. 自动化配置的流程:当增加处理新"段"

详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南_nginx

Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而Nginx是轻量级的服务器.Apache服务器稳定.开源.跨平台,但是Apache服务器不支持高并发,Nginx能支持处理百万级的TC

CentOS6系统中GitLab+Nginx(SSL)+MySQL+Ruby安装配置

本文选择NGINX与MYSQL来配合GitLab实现web管理,数据存储等功能,配置过程中难点基本在GitLab的脚本修改,SSH秘钥连接,Nginx SSL证书等这些方面,作者也是耗费非常大的力气,结合很多文档的clue以及很多老外的debug comment,终于最终完成,希望在此给大家一个抛砖引玉的机会,了解到SCM(软件配置管理)其实也不是想象中那么小儿科,很多逻辑也着实需要下功夫investigation. 最后我是一路向北,我为我自己带盐.... 解决方案: 环境部署 操作系统