无法使用 nginx 将资产请求代理到文件存储
Can not proxy assets requests to file storage with nginx
我正在尝试将请求代理到数字海洋 space 存储,例如:GET http://example.com/download/image_id.jpg
---> https://bucket-name.fra1.cdn.digitaloceanspaces.com/images/image_id.jpg
,但我得到
<Error>
<Code>NoSuchBucket</Code>
<BucketName>example.com</BucketName>
<RequestId>tx000000000000018d441fd-005d582ff2-1b7a15-fra1a</RequestId>
<HostId>1b7a15-fra1a-fra1</HostId>
</Error>
这是我的完整配置:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /download/ {
proxy_pass https://bucket_name.fra1.digitaloceanspaces.com/images$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
resolver 8.8.8.8;
}
}
我已经尝试了不同的选项 with/without 尾部斜杠,但在仔细阅读文档后,我认为现在它是最佳配置,
我还尝试调试我被代理替换
的地方
proxy_pass https://bucket_name.fra1.digitaloceanspaces.com/images$request_uri;
和
proxy_pass https://google.com/images$request_uri;
它给了我预期的结果。
根据文档,我想做的是这样的:
location /download/ {
proxy_pass https://bucket_name.fra1.digitaloceanspaces.com/images;
...
所以 download
部分被替换为 images
,但是,它没有用。
目前(用google调试后)我几乎确信proxie_pass之后的url等于https://bucket_name.fra1.digitaloceanspaces.com/images/image_id.jpg
,所以也许关键问题在"spaces"
的错误方法
P.S。我乐于接受有关 log/debug proxy_pass 价值的更好方法的建议。
所以... proxy_set_header Host $host;
打破了一切。删除它固定代理。
我正在尝试将请求代理到数字海洋 space 存储,例如:GET http://example.com/download/image_id.jpg
---> https://bucket-name.fra1.cdn.digitaloceanspaces.com/images/image_id.jpg
,但我得到
<Error>
<Code>NoSuchBucket</Code>
<BucketName>example.com</BucketName>
<RequestId>tx000000000000018d441fd-005d582ff2-1b7a15-fra1a</RequestId>
<HostId>1b7a15-fra1a-fra1</HostId>
</Error>
这是我的完整配置:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /download/ {
proxy_pass https://bucket_name.fra1.digitaloceanspaces.com/images$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
resolver 8.8.8.8;
}
}
我已经尝试了不同的选项 with/without 尾部斜杠,但在仔细阅读文档后,我认为现在它是最佳配置, 我还尝试调试我被代理替换
的地方proxy_pass https://bucket_name.fra1.digitaloceanspaces.com/images$request_uri;
和
proxy_pass https://google.com/images$request_uri;
它给了我预期的结果。
根据文档,我想做的是这样的:
location /download/ {
proxy_pass https://bucket_name.fra1.digitaloceanspaces.com/images;
...
所以 download
部分被替换为 images
,但是,它没有用。
目前(用google调试后)我几乎确信proxie_pass之后的url等于https://bucket_name.fra1.digitaloceanspaces.com/images/image_id.jpg
,所以也许关键问题在"spaces"
P.S。我乐于接受有关 log/debug proxy_pass 价值的更好方法的建议。
所以... proxy_set_header Host $host;
打破了一切。删除它固定代理。