Fazer proxy do S3 por meio do Nginx permite usar seu servidor como intermediário entre os clientes e o armazenamento S3, oferecendo vários benefícios. Você pode ocultar o acesso direto ao S3, controlar o cache para otimizar o tráfego, modificar cabeçalhos para lidar com requisições de forma mais flexível e restringir o acesso ao conteúdo. Além disso, um proxy ajuda a unificar o acesso a vários serviços sob um único domínio, reduzir custos de tráfego com cache local e habilitar registro detalhado de requisições para análise.
Primeiro, instale o Nginx caso ainda não o tenha:
sudo apt update
sudo apt install nginx
Verifique se o Nginx está em execução com o comando:
sudo systemctl status nginx
Se não estiver, inicie o serviço e habilite-o para iniciar junto com o sistema:
sudo systemctl start nginx
sudo systemctl enable nginx
Para que o proxy funcione, seu bucket precisa ser público ou ter acesso configurado para o endereço IP do seu servidor.
Para permitir acesso ao bucket a partir do IP do seu servidor, defina uma política de bucket usando a AWS CLI. Primeiro, crie um arquivo chamado bucket-policy.json com o seguinte conteúdo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket_name/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "server_IP_address"
}
}
}
]
}
Especifique os parâmetros:
bucket_name: nome do seu bucket.server_IP_address: endereço IP externo do seu servidor.Aplique a política ao bucket:
aws s3api put-bucket-policy --bucket bucket_name --policy file://bucket-policy.json --endpoint-url https://s3.hmstorage.net
Se você precisar permitir vários endereços IP, adicione-os como um array no campo IpAddress:
"IpAddress": {
"aws:SourceIp": ["IP_address_1", "IP_address_2"]
}
Agora, o bucket só poderá ser acessado a partir dos endereços IP especificados.
Crie um arquivo de configuração para o proxy. Por exemplo, crie o arquivo s3_proxy.conf em /etc/nginx/sites-available:
sudo nano /etc/nginx/sites-available/s3_proxy.conf
Configure-o da seguinte forma:
server {
listen 80;
server_name your_domain;
location / {
proxy_pass https://s3.hmstorage.net/bucket_name/;
proxy_set_header Host s3.hmstorage.net;
proxy_ssl_server_name on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Authorization "";
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
proxy_hide_header Set-Cookie;
add_header Cache-Control "public, max-age=3600";
expires 1h;
}
}
Salve o arquivo e crie um link simbólico em sites-enabled:
sudo ln -s /etc/nginx/sites-available/s3_proxy.conf /etc/nginx/sites-enabled/
Verifique se há erros na configuração:
sudo nginx -t
Se não houver erros, reinicie o Nginx:
sudo systemctl restart nginx
Agora, os arquivos do bucket estarão disponíveis em http://your_domain/file_name.
Para aumentar a segurança, configure HTTPS usando o Certbot. Instale o Certbot e o plugin do Nginx:
sudo apt install certbot python3-certbot-nginx
Gere e instale o certificado SSL:
sudo certbot --nginx -d your_domain
O Certbot atualizará automaticamente a configuração do Nginx para HTTPS. Depois de concluído, o Certbot ativará o certificado e o proxy passará a funcionar por meio de uma conexão segura.