Tenho 2 instâncias do AWS EC2, uma das quais reside em uma sub-rede pública e está configurada para atuar como uma instância NAT , e executa Nginx. A outra instância reside em uma sub-rede privada, mas pode se comunicar com a pública. Os respectivos endereços IP das instâncias são, por exemplo:
- 172.25.48.14 - Instância Nginx em uma sub-rede pública (172.25.48.0/28), tem um IP elástico atribuído
- 172.25.48.140 - instância executando php-fpm em uma sub-rede privada (172.25.48.128/28)
A questão é que eu quero que este site seja acessível por uma certa URL - eu supus que o Nginx agisse como um servidor proxy reverso que mapeia solicitações para certos subdomínios ou URLs para recursos respectivos. Então, aqui está minha configuração do Nginx:
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
server_names_hash_bucket_size 128;
include /etc/nginx/mime.types;
default_type text/html;
proxy_headers_hash_bucket_size;
access_log /var/log/nginx/access.log
error_log /var/log/nginx/error.log
server {
listen 80;
location ~ ^/site1(.*)$ {
# These are commented out because no matter if specified or not the result is the same
# index index.php;
# try_files $uri $uri/ /site1/index.php?$request_uri;
location ~ \.php$ {
include fastcgi.conf;
try $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 172.25.48.140:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
}
E aqui está, respectivamente, a configuração do pool php-fpm para o site na instância privada:
[site1]
user = www-data
group = www-data
listen = 172.25.48.140:9000
listen.allowed_clients = 172.25.48.14, 172.25.48.140, 127.0.0.1
php_admin_value[disable_functions] = exec, passthru, shell_exec, system
php_admin_flag[allow_url_fopen] = off
pm = dynamic
pm.max_children = 10
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 8
pm.process_idle_timeout = 30s
pm.status_path = /php_status
ping.path = /ping
ping.response = wrrrrrrrrryyyyyyyyyyy
access.log = /var/log/php/8.3/$pool.access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%"
Para simplificar, vamos supor que eu tenha apenas um único index.php
arquivo, que também reside na instância privada em /apps/site1/
, que tem um link simbólico em /var/www/html/site1
.
O problema é que não importa o que eu tente, recebo 404, e a julgar pelos logs no lado da instância privada, a solicitação nem chega lá - mesmo sabendo que tenho os grupos de segurança da instância configurados corretamente e nas portas certas, porque, de outra forma, posso conectar da instância privada para a pública e vice-versa sem problemas. A única vez que recebi uma solicitação para o php-fpm (embora um 404 também) foi quando movi a pesquisa de "localização" mais profunda (aquela que corresponde aos scripts .php) para o nível superior do servidor - então, basicamente, a solicitação foi direto para 172.25.48.14
, e não para 172.25.48.14/site1
como eu pretendia.
Estou esquecendo de algo? O problema pode ser que os arquivos de origem estão localizados na mesma instância que o php-fpm, e não no lado do Nginx? Estou entendendo errado o conceito de como ele funciona? Por favor, se você tiver alguma ideia sobre isso, ficarei extremamente grato pela sua ajuda. Obrigado antecipadamente!