ruby-on-rails - Rails API 仅配置 NGINX
问题描述
在 Amazon 上,Linux 让 Nginx 与 rails 应用程序一起运行。都好。添加了 Rails API 应用程序(API 仅以 /api/v1/xxxxx 开头的路由)
API 的 Nginx 配置
upstream cb_api {
server unix:///var/www/html/counterpoint-api/shared/sockets/puma.sock;
}
server {
listen 80 ;
listen [::]:80;
root /var/www/html/counterpoint-api/public;
index index.html index.htm;
server_name cb-api.ariki.online;
location ~ ^api/v1/(.+)$ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://cb_api;
#proxy_redirect off;
}
}
我已经尝试了所有我能想到的变体,但总是从 Nginx 收到 403 错误。
有人有工作示例配置吗?
解决方案
选项1
您可以简单地重定向到 ^api/v1/(.+)$ 上的端口 3000(运行 rails 的地方)
这是最简单的选择:
server {
listen 80;
listen [::]:80;
server_name cb-api.ariki.online;
location ~ ^api/v1/(.+)$ {
proxy_pass http://127.0.0.1:3000;
}
}
然后,在 3000 端口中启动您的 rails 应用程序。
选项 2
在您的应用程序中创建一个配置文件:
$ touch /home/your_linux_user/your_app_name/config/nginx.conf
在配置文件中添加以下内容:
$ sudo vim /home/your_linux_user/your_app_name/config/nginx.conf
upstream puma {
server unix:///home/your_linux_user/your_app_name/tmp/sockets/your_linux_user-puma.sock;
}
server {
listen 80 default_server deferred;
# server_name example.com;
root /home/your_linux_user/your_app_name/public;
access_log /home/your_linux_user/your_app_name/log/nginx.access.log;
error_log /home/your_linux_user/your_app_name/log/nginx.error.log info;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @puma;
location @puma {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 10M;
keepalive_timeout 10;
}
然后创建一个指向您的 conf 的链接并启动 nginx:
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo ln -nfs /home/your_linux_user/your_app_name/config/nginx.conf /etc/nginx/sites-enabled/your_app_name
$ sudo 服务 nginx 启动
最后,运行 puma 创建套接字文件:
$ puma -b unix:///home/your_linux_user/your_app_name/tmp/sockets/your_app_name-puma.sock
推荐阅读
- r - 在 R 中提取/读取文件时使用逗号
- python - UserWarning: MongoClient 在 fork 之前打开。仅在 fork 后创建 MongoClient
- python - ValueError:None 中并非所有运算符都支持稀疏矩阵。稀疏矩阵请使用“TPOT sparse”
- python - Python:- 从包含在标签中的行 [0] 中提取列标题。去掉行星名称后的unicode符号和链接号
- php - 我需要使用 Laravel 项目的所有附加功能吗?
- amazon-web-services - 如何配置 MediaConvert 为不同的输入触发不同的事件?
- android - 在 Android 中查询 USB 设备
- c - 如何应用循环平铺?
- elasticsearch - 在 Elasticsearch 中查询非规范化的树数据
- performance - 仅当分母非零时计算分数的有效方法