nginx ssl加密代理配置指南
| 使用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-----这些东东的正确格式,这样才能成功。 |

浙公网安备 33010602011771号