使用docker和nginx部署时,ActiveStorage image_tag错误的主机名



Im在Rails 6中使用ActiveStorage。一切都很好,直到我将我的应用程序从heroku迁移到AWS EC2服务器。

我的堆栈由以下组成:

带有名为application_serverpuma应用程序服务器的docker容器

一个名为nginx的带有nginx的docker容器

问题是,当我使用image_tag助手作为参数传递视图中的模型实体时,它被解决为如下

<img alt="..." src="http://application_server/rails/active_storage/representations/redirect/....jpg?locale=it">

而不是

<img alt="..." src="https://my-domain.com/rails/active_storage/representations/redirect/...jpg?locale=it">

正如我所料。

这两个容器共享相同的docker网络,nginx配置如下:

upstream application_server {
server application_server:3000;
}
server {
listen 80;
server_name my-domain.com;
location / {
return 301 https://$host$request_uri;
}    
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
}
server {
listen 443 ssl;
server_name my-domai.com;
ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem;

location / {
proxy_pass http://application_server/;
}
}

我不明白是nginx还是activestorage 出了问题

server
{
listen 443 ssl;
server_name my-domain.com;
ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem;

location /
{
proxy_pass http://application_server;
proxy_redirect 'http://application_server/' 'https://my-domain.com/';
sub_filter_once off;
sub_filter_types "*";
sub_filter 'http://application_server' 'https://my-domain.com';
}
}

完全未经测试。

  • http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
  • http://nginx.org/en/docs/http/ngx_http_sub_module.html

如果你有nginx extra或openresty,你也可以尝试subs_filter(注意额外的s(来获得额外的regex支持。

请记住,当您通过JavaScript动态生成链接时,sub_filter不会直接工作。您还需要修改JavaScript(通过sub_filter(。

如果proxy_redirect不起作用,你可以试试Lua。通过curl -IL <URL>检查您的重定向。

相关内容

最新更新