Rails+Puma+Nginx+HTTPS(SSL) 网站服务搭建记录(二):nginx 安装及配置,及 puma+nginx 运行 rails app
本系列分三篇,记录了 Rails+Puma+Nginx+HTTPS(SSL) 网站服务搭建的全部过程
(一):Ubuntu 下 Ruby on rails 环境搭建及测试
(二):nginx 安装及配置,及 puma+nginx 运行 rails app
(三):SSL(HTTPS) 证书申请及 nginx 配置
Ubuntu 安装 nginx
完整卸载 nginx 服务器
1. 首先需要停止当前的nginx服务(如果当前正在运行nginx服务)
1 | sudo service nginx stop |
2. 删除nginx及其配置文件
1 | sudo apt --purge remove nginx |
3. 列出与nginx相关的软件,并删除
1 | dpkg --get-selections|grep nginx |
4. 再次验证
1 | dpkg --get-selections|grep nginx |
重新安装nginx服务
1. 添加nginx.org官方源
由于ubuntu自带的nginx版本较老,需要通过添加官方nginx.org源来安装更新的版本。
1 | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62 |
2. 将下面一行内容添加到ubuntu apt源配置文件/etc/apt/sources.list
中
1 | deb http://nginx.org/packages/ubuntu/ precise nginx |
3. 安装nginx包
1 | sudo apt update |
4. 验证安装
一旦成功安装上之后,输入以下命令可看到当前nginx版本信息
1 | ubuntu@ip-xxx-xx-xx-xxx:~$ nginx -v |
Ubuntu 下安装成功后,其文件结构大致为:
- 配置文件:
/etc/nginx/
,并且每个虚拟主机已经放在了/etc/nginx/sites-available
下 - 程序文件:
/usr/sbin/nginx/
- 日志文件:
/var/log/nginx/
- 启动脚本:
/etc/init.d
- 默认的虚拟主机的目录为
/var/www/nginx-default
(或/var/www
),具体位置可参考/etc/nginx/sites-available
里的配置。
其中配置文件目录结构如下:
5. 启动nginx服务(也可之后需要时再启动)
1 | sudo service nginx start |
此外,nginx的常用命令还有
重启:sudo service nginx restart
停止:sudo service nginx stop
nginx 配置
我们首先需要在 nginx 配置 upstream
,直接告诉 nginx 将请求代理解析到哪里。之后需要添加一个虚拟主机并使用 proxy_pass
告诉 nginx 将请求传递给 upstream
中定义的进程池。
具体来说,首先需要通过删除下面的符号链接 sites-enabled/default
来禁用掉默认的站点设置
1 | sudo rm /etc/nginx/sites-enabled/default |
之后,创建一个新的虚拟主机配置文件在 sites-available下,如 /etc/nginx/sites-available/my_app.conf
1 | sudo vim /etc/nginx/sites-available/my_app.conf |
在其中写入以下内容
1 | upstream my_app { |
之后我们需要创建一个符号链接从 sites-enabled 指向该配置文件启用它
1 | sudo ln -sf /etc/nginx/sites-available/my_app.conf /etc/nginx/sites-enabled/my_app.conf |
重启 nginx 服务:
1 | sudo service nginx restart |
启动 rails app
在使用 nginx 之前,我们可以通过以下命令以生产方式启动 rails 服务
1 | # 编译 |
此时输出如下代表网站正常运行
注意:这是之前没有使用 nginx 时开启 rails 应用,如果此时 nginx 正在运行中会占用 80 端口,rails 应用将无法使用 80 端口,此时可通过修改上面的 -p
参数修改为其它端口(如3000),来查看我们的网站。
而当我们使用 nginx 进行代理时,我们不需要指定端口(由 nginx 管理),而是启动 rails app 并告诉 puma 将其绑定到一个 unix socket 上,这个 socket 就是之前 nginx 中 upstream
中指定的 socket:
1 | rvmsudo bundle exec puma -e production -b unix:///var/run/my_app.sock |
不出意外,应该得到以下输出,
并可在浏览器中进入自己的页面看到经过 nginx 代理的网页应用(如未正常运行,需检查 nginx 服务是否开启,配置文件是否正确)。