gpt4 book ai didi

ruby-on-rails - 如何让 SSL 在 Nginx 上的 Rails 中工作?

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:28 24 4
gpt4 key购买 nike

我刚刚使用 Ubuntu、Unicorn 和 NginX 在 VPS 上部署了我的 Rails 4 应用。

对于我的应用程序,我需要使用 SSL,所以我有这个 ApplicationController:

class ApplicationController < ActionController::Base

force_ssl

...

end

这是我的nginx.conf:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events { worker_connections 1024; }

http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;

server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

gzip on;
gzip_disable "msie6";
gzip_types text/plain text/xml text/css text/comma-separated-values;
upstream app_server { server 127.0.0.1:8080 fail_timeout=0; }

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

server {
listen 80;
server_name myapp.com;
rewrite ^ https://$server_name$request_uri? permanent;
}

server {
listen 443;
server_name myapp.com;
root /home/rails/public;
index index.htm index.html;

ssl on;
ssl_certificate /etc/ssl/myapp.com.crt;
ssl_certificate_key /etc/ssl/myapp.com.key;

location / {
try_files $uri/index.html $uri.html $uri @app;
}

location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_pass http://app_server;
}
}
}

似乎一切正常。当对 http 页面的请求到来时,它会被转发到 https,这很好。

但是,当尝试在浏览器中更改应用程序的 locale 时(通过语言菜单),我在浏览器中收到此错误消息:

Safari can't open the page https://app_server/en/sessions/new because Safari can't find the server "app server"

在 URL 中它还说:https://app_server/en/sessions/new

我在这里错过了什么?

我是 NginX 的新手,也许有人可以帮助我?

非常感谢任何有关如何增强我的代码的一般性建议。

最佳答案

您正在使用 proxy_pass http://app_server;,它默认将 Host header 设置为 app_server。添加 proxy_set_header Host $host;,因此您的应用程序将获得正确的 Host

location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass http://app_server;
}

关于ruby-on-rails - 如何让 SSL 在 Nginx 上的 Rails 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24061301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com