好久没写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
分享到:
相关推荐
配置dotnet+nginx+SSL+centos
本资源是一个 CentOS 下对 Nginx + Tomcat 配置 SSL 实现服务器 / 客户端双向认证配置示例。详细如何配置请参考博客《图文:CentOS 下对 Nginx + Tomcat 配置 SSL 实现服务器 / 客户端双向认证》,地址是:...
Nginx+Uwsgi+Django(python3)+Vue部署,一步步实现。网上找了N多篇文章都没成功,特意记录,以免其他同学踩坑
Nginx+tomcat+ssl安装配置手册.pdf
详细说明了windows服务器nginx+tomcat+mysql部署及配置(配置阿里云后台安全组,配置域名)很适合新手学习 附件中包含: 1.操作说明文档 2.操作录屏 3.安装所用到的软件安装包 1)Windows Server 2019 数据中心版 ...
window版本,使用nginx+tomcat实现集群架构。包含http集群和https2钟方式集群,解压即可以用。证书什么都已经配置好了。如果商业证书直接替换就可以了。
Nginx+tomcat配置集群负载均衡实现动静分离实例
Nginx+tomcat+redis软负载均衡需要的一整套资源,还包括了JDK,依赖包等文件
docker-compose php7.3.4-fpm+nginx+mysql配置
主要介绍了在阿里云服务器上配置CentOS+Nginx+Python+Flask环境的教程,值得一提的是这里的方案用Nginx作反向代理而使用Gunicorn作wsgi服务器,需要的朋友可以参考下
自己做的一个nginx+tomcat+redis完成session共享小例子,包括所需jar,适合初学者,希望大家一起学习交流
nginx配置+https
Nginx+Tomcat、负载均衡、SSL
在Linux环境中,用uwsgi+daphne+Nginx+supervisor部署Django项目,史上最全步骤
基于window版本下,使用nginx+tomcat搭建好的集群架构,解压既可以使用。 nginx使用的是当前最新版本(1.7.0),memcached for windown版本是1.4.4,也是目前最新版本。 包含了http的集群环境,https的集群环境,同时...
nginx+lua+redis通过匹配客户端ip进行灰度发布
主要介绍了Nginx+SSL+Node.js运行环境配置教程,本文用反向代理的方式代理基于Node.js的Web应用,需要的朋友可以参考下
用FFmpeg+nginx+rtmp搭建环境实现推流
nginx+lua+redis 集群 连接插件和脚本,原来插件是没有密码功能 故 修改了一下 k可以自己下载使用
基于Nginx+RTMP 配置推拉流服务器,以及设置回调功能