设为首页 收藏本站
查看: 683|回复: 0

[经验分享] Nginx + ssl + Passenger 配置

[复制链接]

尚未签到

发表于 2016-12-24 09:46:11 | 显示全部楼层 |阅读模式
好久没写blog了。
今天搞了半天才搞定 Nginx + SSL的配置,主要是对这方面不太理解,导致一开始的思路就错了,我原以为在Nginx下的一个server里同时监听 80 和 443端口,就可以让服务器自动处理这两种不同链接,如: http://www.domain.com 和 https://www.domain.com 。
但是在nginx.conf里面打开了 ssl on:之后,所有的链接变成https的,也就是变成了强制使用ssl协议了,而且使用了Rails的ssl_requirement插件后,会出现死循环的重定向,就是 http://www.domain.com 跳转到 https://www.domain.com,然后又重新跳转,我那个汗啊...
静下来研究了一番,发现对ssl还是要做重定向,思路就是:
1.在nginx里面配置两个server,一个监听80端口,一个监听443端口。
2.把所有使用https访问的请求,也就是使用443端口的请求转发给服务器的80端口来处理。
3.由于在应用里使用ssl_requirement来强制使用ssl链接,所有在应用了要求使用ssl的链接都不能使用http来访问,会强制进行跳转。
可能这个东西很多对服务器熟悉的人都明白,我还是搞了大半天才搞好,终究是底子差了点。
贴出配置文件:

#user  nobody;
worker_processes  4;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;

events {
worker_connections  51200;
}

http {
passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.0;
passenger_ruby /usr/local/bin/ruby;
include       mime.types;
default_type  application/octet-stream;
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
log_format  main  '$remote_addr | $remote_user | [$time_local] | "$request" | '
'"$status" | $body_bytes_sent | "$http_referer" | '
'"$http_user_agent" | "$http_x_forwarded_for" | $request_time';
#access_log  logs/access.log  main;
sendfile        on;
#tcp_nopush     on;
#keepalive_timeout  0;
keepalive_timeout  65;
gzip  on;
client_max_body_size 20m;
client_header_buffer_size 16k;
large_client_header_buffers 4 64k;
# forbid ip access 禁止用IP访问
server{
listen 80;
server_name _;
return 404;
}
# dev server
server{
listen 80; #监听正规的80端口
server_name www.domain.com;
access_log /home/domain.com/dev/log/access.log main;
rails_env development;
location ~ ^/(product|image|images)/ {
access_log off;
root /home/domain.com/dev/public;
expires 30d;
}
location / {
root /home/domain.com/dev/public;
passenger_enabled on;
}
}
# ssl to server 配置转发
upstream server {
server 127.0.0.1:80;
}
# ssl for dev
server{
listen 443; #监听 SSL端口
server_name www.domain.com;
access_log /home/domain.com/dev/log/ssl_access.log main;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server_nopassword.key;
# 下面这堆都是抄的
location / {
proxy_pass  http://server; #把所有的请求转发给 server,看上面的配置
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
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;
proxy_redirect     off;
}
}
}


上面的配置文件很多都参考这篇文章的 http://www.cnphp.info/howto-setup-nginx-ssl-reverse-proxy.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-318700-1-1.html 上篇帖子: nginx官网文档地址 下篇帖子: django部署记录 Nginx+uWSUI
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表