1 votes

$_SERVER['SERVER_NAME'] retourne le port/nom du proxy inverse nginx

Je fais tourner WordPress selon la configuration suivante:

Varnish (Port 80) -> nginx (Port 8080)

Tout fonctionne très bien, sauf lorsque certains plugins ou autres tentent d'obtenir le nom de mon serveur en utilisant $_SERVER['SERVER_NAME']. Dans ce cas, le nom de mon serveur et le port renvoyés sont _:8080. Voici ce que contient la configuration nginx:

server {
listen 8080;
server_name _;

Ce que je voudrais voir renvoyé est domaine.com, mais si je modifie la configuration nginx, évidemment, il cesse d'écouter sur le port correct (8080) (mais changer le server_name fonctionne bien).

Comment puis-je faire en sorte que nginx écoute sur le port 8080 mais que $_SERVER['SERVER_NAME'] renvoie le bon port (ou plutôt, n'ajoute pas le mauvais port)?

1voto

Michael Hampton Points 232226

_:8080 est la valeur correcte pour $_SERVER['SERVER_NAME'] dans cette configuration. Il est explicitement défini pour renvoyer la valeur de server_name. De la documentation:

Le nom de l'hôte du serveur sous lequel le script actuel s'exécute. Si le script s'exécute sur un hôte virtuel, ce sera la valeur définie pour cet hôte virtuel.

Il semble que vous recherchiez $_SERVER['HTTP_HOST']. Notez que vous devez également ne pas avoir configuré Varnish pour altérer l'en-tête de requête Host:.

0 votes

Je suis d'accord... mais je ne peux pas contrôler les plugins que les développeurs utilisent pour obtenir le nom de mon serveur. C'est pourquoi je cherche une solution alternative pour le configurer selon leurs besoins. Je vais vérifier ce que nous faisons ou ne faisons pas avec le Host dans Varnish. Merci!

1 votes

Eh bien, vous ne pouvez pas les contrôler directement, mais s'ils essaient de regarder SERVER_NAME alors c'est un bug assez sérieux. Les plugins devraient appeler get_site_url() pour trouver l'URL du site, et l'analyser si nécessaire. Vous pouvez toujours signaler des bugs. Vous ne pouvez pas garantir qu'un développeur corrigera les bugs, cependant...

0 votes

Et c'est exactement ce qu'ils ont fait! Je suis en train de mettre à jour le site maintenant pour le tester.

0voto

HugoFS Points 313

Vous pouvez substituer la valeur par défaut de $_SERVER['SERVER_NAME'] en ajoutant une directive fastcgi_param après l'instruction include fastcgi_params;.

Par exemple:

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param  SERVER_NAME  $http_host;
    ...
}

La valeur définie dans le fichier inclus sera silencieusement écrasée par la valeur de $http_host.

0 votes

Excellente! Je vais essayer cela pour l'autre plugin qui fait ça (voir ci-dessous, l'un des développeurs a déjà mis à jour leur code)!

0 votes

Gardez à l'esprit que cela peut ne pas résoudre un plugin cassé qui dépend de manière inappropriée de SERVER_NAME. Par exemple, cette valeur n'aura jamais rien d'utile lors de l'installation d'un sous-domaine multisite WP. Le développeur devra toujours corriger le bogue dans ce cas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X