NGINX blocs de serveur multiples avec proxy inverse

J’utilise nginx + PHP + MySQL et tomcat + postresql sur windows (je sais que ce n’est pas une très bonne utilisation des ressources, j’ai juste besoin de toutes ces ressources pour certains projets).

et j’ai besoin d’un peu d’aide avec la configuration nginx. Je prévois éventuellement d’exécuter nginx sur le port 80 où wiki.example.com et site.example.com ont la même adresse IP. mais je voudrais transférer les demandes pour site.example.com vers tomcat à localhost: 8080, et les demandes pour wiki.example.com seront servies par nginx.

Je sais où se trouve mon problème dans la configuration uniquement parce que je peux voir l’erreur dans la console. Je ne peux pas définir deux parameters “emplacement /” même s’ils se trouvent dans des blocs de serveur différents. voici ma config, est-ce que quelqu’un sait comment le réparer?

http { include mime.types; default_type application/octet-stream; server { listen 8080 default_server; server_name _; server_name_in_redirect off; root www/html; } server { listen wiki.example.com:8080; server_name wiki.example.com; location / { #proxy_pass http://localhost:80/; #proxy_set_header Host $http_host; root www/wiki; index index.html index.htm index.php; } location ~ .php$ { root www/wiki; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; index index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } server { listen site.example.com:8080; server_name site.example.com; root www/html; location / { proxy_pass http://localhost:80/; proxy_set_header Host $http_host; root www/html; index index.html index.htm index.php; } } } 

MODIFIER:

Merci beaucoup pour votre aide. J’ai édité la config selon vos instructions et ça marche surtout !! 🙂 la navigation sur site.example.com chargera le site (mandaté par nginx et servi via tomcat)

MAIS la navigation vers wiki.example.com produira un message nginx 404, mais la navigation vers wiki.example.com/index.php?title=Main_Page chargera mediawiki normalement. il semble donc que les valeurs par défaut sont gâchées pour le bloc du serveur wiki.

http://pastebin.com/znT8q6WQ

cela ressemble-t-il à la partie avec l’erreur?

D’après votre description de ce que vous essayez de faire, je pense que votre nginx.conf devrait ressembler à ceci:

 http { include mime.types; default_type application/octet-stream; server { listen 80; server_name site.example.com; # pass all requests to service listening on port 8080 location / { include /usr/local/nginx/conf/proxy.conf; proxy_pass http://localhost:8080; proxy_redirect http://localhost:8080/ http://$host; } } server { listen 80; server_name wiki.example.com; root /path/to/your/www/wiki; index index.html index.htm index.php; location / { try_files $uri @backend; } location @backend { rewrite ^ /index.php?title=$request_uri last; } # proxy to php-fpm listening on port 9000 location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # your other rules here... error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80 default_server; server_name _; access_log off; return 301 $scheme://site.example.com$request_uri; } } 

Dans le premier bloc de serveur, nginx écoutera sur le port 80 les requêtes correspondant à “site.exemple.com” et un proxy quel que soit le service que vous utilisez sur 8080 (tomcat).

Dans le deuxième bloc de serveur, nginx écoutera sur le port 80 les requêtes correspondant à “wiki.example.com” et utilisera php (ou probablement php-fpm) sur le port 9000 pour les traiter.

Le dernier bloc de serveur est votre défaut. Il écoute également sur le port 80 et sert de fourre-tout – tout ce qui ne correspond pas à “site.exemple.com” ou “wiki.exemple.com” se terminera ici et dans l’exemple, il ne fait que redirect vers “site.exemple”. com. ”

information additionnelle

Le bloc d’emplacement situé au-dessus des proxies vers un service backend contient une instruction include qui charge un “proxy.conf” dans le répertoire nginx conf (/ usr / local / nginx / conf). Voici un exemple de jeu de configurations “proxy.conf” que j’utilise pour spécifier les parameters proxy: vous pouvez spécifier ces parameters en ligne si vous n’utilisez pas un fichier de configuration distinct:

 proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 32m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k; 

MODIFIER:

Mise à jour de l’exemple de code de blocage du serveur pour “wiki.example.com”. Je vous recommande, pour plus de clarté, de spécifier votre répertoire racine comme chemin absolu afin que vous et nginx sachiez exactement où le trouver sur le système de fichiers. De plus, dans le code mis à jour, le bloc @backend redirecta et transmettra toutes les requêtes que nginx ne pourra pas trouver pour le fichier index.php du wiki média à traiter. Cela vous permet également d’utiliser des URL propres comme “wiki.example.com/Main_Page” (et qui seront réécrites sous la forme “wiki.example.com/index.php?title=Main_Page”).