Im在Rails 6中使用ActiveStorage。一切都很好,直到我将我的应用程序从heroku迁移到AWS EC2服务器。
我的堆栈由以下组成:
带有名为application_server
的puma
应用程序服务器的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>
检查您的重定向。