MacOS下Rails+Nginx+SSL环境的搭建(下)
五.以Production环境部署Rails项目
这里插一个题外话,我们之前是以development环境运行的rails项目,现在我们希望在实际的生产系统中跑一下看看.这是十分有必要的,应该在rails项目的早期进行生产系统的测试,否则到后面会遇到很多奇怪的问题.
正常情况下在rails项目的config/environments目录中按照对于环境包含了各自对应的配置文件,我们不需要做任何修改.不过鉴于每个人的运行环境千差万别,在production.rb配置文件中有3个地方要简单提及一下:
1.config.serve_static_assets = true这句应该注释掉
2.config.action_dispatch.x_sendfile_header这就应该取消注释
3.config.force_ssl这句应该注释掉.即使你在后面打开了SSL支持,这句也可以注释掉,因为SSL是Nginx而不是Rails来支持的!当然有些人实现SSL的方式不一样,可能这里需要取消注释,在这里我只是点到为止.
上面一切正常后我们首先要进行资源的预编译:
rake assets:precompile
完毕后你会在项目的public/assets目录中找到编译压缩打包后的资源.
这时你可以尝试以生产环境来运行Rails服务了:
RAILS_ENV=production rails s
不出意外,你会看到控制台输出如下内容:
Rails 4.0.6 application starting in production on http://0.0.0.0:3000
你首先应该关闭nginx服务,在本地首先测试Rails是否正常,然后在考虑在nginx中测试.
六.SSL支持
最后我们可以在之前成功运行的Rails_Nginx环境中开启对SSL的支持.在配置SSL之前,我首先要说明一点,商用的SSL证书是要花银子买的,不过如果只是在本地测试SSL那么我们可以自己制作self-sign类型的证书.打开以这种证书认证的SSL,浏览器会提示该站点证书有问题,不过只是本地测试也无伤大雅.
首先你的系统中要装openssl,然后进入你需要保存证书的目录,依次运行如下命令:
//创建一个server.pass.key文件
openssl genrsa -des3 -out server.pass.key 2048
//然后用之前创建的key文件生成一个server.key文件
openssl rsa -in server.pass.key -out server.key
//删除server.pass.key,他的使命已经完成了
rm server.pass.key
//创建server.csr文件,注意在提示输入challenge password时直接回车
openssl req -new -key server.key -out server.csr
//生成server.crt文件
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
此时你的目录用应该有server.crt server.csr server.key三个文件.
下面我们在原有nginx.conf的http块中添加SSL的配置:
server {
listen 443 ssl;
server_name localhost;
passenger_enabled on;
rails_env production;
root rails_project_path/public;
access_log /usr/local/nginx/logs/rails.log;
ssl on;
ssl_certificate your_path/server.crt;
ssl_certificate_key your_path/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# location ^~ /assets/ {
# gzip_static on;
# expires max;
# add_header Cache-Control public;
# }
# error_page 500 502 503 504 /500.html;
# client_max_body_size 4G;
# keepalive_timeout 10;
}
上面的root目录和两个证书的目录要换成你自己的路径.
重新载入Nginx配置,如果不出意外当你通过浏览器访问https://localhost时会出现证书非法的提示框,此时你应该选择信任该证书,再次刷新,你就可以打开网页了.
七.尾声
恭喜!你已经成功的在MacOS上创建了SSL支持的Nginx服务器!
最后说2点:
a. Nginx的log可以在conf中设置,在对应的server块中添加以下一句:
access_log /usr/local/nginx/logs/rails.log;
b.如果你在本地用rails s调试网站,你可以直接在后面看到log,但是如果通过Nginx和passenger运行Rails的话,你很难看到rails的输出,不过你可以通过如下命令来监控:
tail -f rails_project/log/production.log
MacOS下Rails+Nginx+SSL环境的搭建(下)的更多相关文章
- MacOS下Rails+Nginx+SSL环境的搭建(上)
这里把主要的步骤写下来,反正我是走了不少弯路,希望由此需求的朋友们别再走类似的弯路.虽说环境是在MacOS下搭建,但是基本上和linux下的很相像,大家可以举一反三. 一.安装Rails 这个是最简单 ...
- MacOS下Rails+Nginx+SSL环境的搭建(中)
三.配置Nginx 先是修改 hosts 文件,意思是创建一个本地域名以便我们访问,比如: $ sudo subl /etc/hosts 127.0.0.1 rails_project.local 但 ...
- arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc)
arm-linux-gnueabihf-gcc下载 qt下载 arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc) Ubuntu 16.04 安装QT arm嵌入式 ...
- windows下配置nginx+php环境
刚看到nginx这个词,我很好奇它的读法(engine x),我的直译是"引擎x",一般引"擎代"表了性能,而"x"大多出现是表示" ...
- (转)windows下配置nginx+php环境
原文地址 http://www.cnblogs.com/huayangmeng/archive/2011/06/15/2081337.html 刚看到nginx这个词,我很好奇它的读法(engine ...
- windows下配置nginx+php环境(转)
刚看到nginx这个词,我很好奇它的读法(engine x),我的直译是“引擎x”,一般引“擎代”表了性能,而“x”大多出现是表示“xtras(额外的效果)”,那么整个词的意思就是类似“极致效果”,“ ...
- windows下python web开发环境的搭建
windows下python web开发环境: python2.7,django1.5.1,eclipse4.3.2,pydev3.4.1 一. python环境安装 https://www.pyth ...
- Ubantu下配置Sublime Text3---python环境的搭建
因为学习机器学习算法的原因,买的参考书籍很多都是python语言进行开发的,因此也想着在Linux系统下配置python的环境.Sublime是一款非常流行的编辑器,可以添加很多小巧有用的插件,同时也 ...
- Linux下Redis集群环境的搭建
一.安装redis(使用redis3.0版本) 1.需要gcc环境,如果没有执行命令安装gcc yum install gcc-c++ 2.下载redis3.0的源码包并上传至服务器 3.解压源码包 ...
随机推荐
- orchard-1.9.2-1.10.2汉化
安装 首先从github上下载orchard源代码:https://github.com/OrchardCMS/Orchard(下载版本最新的1.10.2) 使用vs2017打开源代码,运行进入安装界 ...
- 一 Unicode和UTF-8的异同
下面就是我的笔记,主要用来整理自己的思路.但是,我尽量试图写得通俗易懂,希望能对其他朋友有用.毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识.1. ASCII码我们 ...
- AtomicInteger类的理解及使用
AtomicInteger在多线程并发场景的使用 AtomicInteger提供原子操作来进行Integer的使用,因此十分适合高并发情况下的使用. AtomicInteger位于包package j ...
- 【API调用】腾讯云短信
在之前介绍的火车票查询工具中,利用邮件和短信将查询结果推送给用户.免费短信的条数只有5条,用完之后只能单独使用邮件提醒. 最近发现腾讯云的福利,简单的介绍一下用法. 腾讯云->产品->通信 ...
- MySQL-分组查询(GROUP BY)及二次筛选(HAVING)
为了测试GROUP BY 语句,我们创建两张表,并往表中添加数据 -- 创建部门表 CREATE TABLE IF NOT EXISTS department( id TINYINT UNSIGNED ...
- javaIO流--Writer,Reader
Writer /** *<li> Writer中定义的一个重要的方法: * public void writer(String str)throws IOException; */ pac ...
- [LeetCode] Design Compressed String Iterator 设计压缩字符串的迭代器
Design and implement a data structure for a compressed string iterator. It should support the follow ...
- [SDOI2009]HH去散步
题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢 ...
- 紧急疏散evacuate
1689: [HNOI2007]紧急疏散evacuate 题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是".",那么表示这是一块空地 ...
- UVA1658:Admiral
题意:给定一个有向带权图,求两条不相交(无公共点)的路径且路径权值之和最小,路径由1到v 题解:这题的关键就在于每个点只能走一遍,于是我们想到以边换点的思想,用边来代替点,怎么代替呢? 把i拆成i和i ...