Tengo problemas para configurar Nginx/php para enrutar solicitudes de servicio a diferentes sitios. Hemos creado un servicio dentro de nuestra aplicación web que envía contenido al sitio web alojado en nginx (en realidad, el servicio se ejecuta en el script php del servidor web que escribe el contenido en la base de datos y nginx lo presenta en el sitio web usando php). Todo funciona bien con el sitio web raíz (Sitio A). La solicitud se recibe y se escribe en la base de datos MySql en la base de datos A y el sitio web la lee bien. El problema es con el sitio B, cada solicitud enviada al sitio B es recibida por el sitio A y escrita en la base de datos A en lugar de en la base de datos B.
Intenté separarlos con php-fpm pero no tuve suerte. Mi experiencia con la configuración de nginx/php es baja, por lo que agradecería cualquier ayuda. ¿Qué tipo de configuración se necesita para lograr esto?
Lo que he probado hasta ahora.
Creó un nuevo grupo en la carpeta php pool.d. siteB.conf, su contenido es.
; Start a new pool named 'www'.
; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here) [siteB]
user = www-data group = www-data
listen = /run/php/php7.0-fpm-siteB.sock
listen.owner = www-data
listen.group = www-data
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
? ¿Necesito valor/puerto de calcetín? ¿Es necesario cambiar el usuario/grupo de www-group a otro usuario?
Dentro de la carpeta var/www/html/php/service
hay un script php que se conecta a la base de datos mysql y escribe el contenido del primer sitio web (sitio A).
En el servidor nginx tengo varios sitios web (a todos se accede a través del puerto 80) y cada sitio web tiene su propio archivo de base de datos dentro de la base de datos mysql. todos los demás sitios tienen la misma configuración (por ejemplo var/www/siteB/php/service
)
Cuando apunta a una dirección IP, http:/siteA/php/service
todo funciona bien, el contenido se escribe en la base de datos adecuada.
al señalar una dirección http://siteB/php/service
no se escribe el contenido. Servir las páginas del sitio web funciona bien desde nginx, todos los sitios web se cargan excepto el contenido de la base de datos (que no se escribió en el archivo DB).
Supongo que necesito configurar nginx para enrutar correctamente la solicitud al sitio B, ¿cómo puedo hacer esto?
Mi configuración de nginx es
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript
text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}