1 votes

Serveur Nginx avec plusieurs applications sur des sous-répertoires

Mon équipe a un serveur que nous utilisons pour les outils et les tests internes. Il a un sous-domaine qui pointe vers lui : myserver.mycompany.com . Ce que nous essayons de faire, c'est d'avoir plusieurs applications, chacune sous un sous-répertoire. C'est à dire :

  • myserver.mycompany.com - page de saisie générique
  • myserver.mycompany.com/redmine notre redmine interne (un serveur ruby on Rails)
  • myserver.mycompany.com/opensocial un site web drupal que nous testons actuellement (une application php-fpm)

J'ai réussi à faire fonctionner redmine sous le sous-répertoire mais pas le site web drupal sur le sous-répertoire.

Des suggestions ?

Voici une version simplifiée de mon serveur virtuel par défaut :

server {

    # server name and ssl stuff

    root /var/www/html;

    ## REDMINE
    location ~ ^/redmine(/.*|$) {
            alias /opt/redmine/public$1;
            passenger_base_uri /redmine;
            passenger_app_root /opt/redmine;
            passenger_document_root /opt/redmine/public;
            passenger_enabled on;
    }
    ## END REDMINE

    ## START Open Social
    location ~ ^/opensocial(/.*|$) {

            alias /var/www/opensocial/html$1;
            index index.php;

            location ~ ^/opensocial(/.*|$) {
                    try_files $uri /index.php?$query_string; # For Drupal >= 7
            }

            # From nginx's drupal config
            location ~ '\.php$|^/update.php' {
                    fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
                    # Ensure the php file exists. Mitigates CVE-2019-11043
                    try_files $fastcgi_script_name =404;
                    # Security note: If you're running a version of PHP older than the
                    # latest 5.3, you should have "cgi.fix_pathinfo = 0;" in php.ini.
                    # See http://serverfault.com/q/627903/94922 for details.
                    include fastcgi_params;
                    # Block httpoxy attacks. See https://httpoxy.org/.
                    fastcgi_param HTTP_PROXY "";
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    fastcgi_param PATH_INFO $fastcgi_path_info;
                    fastcgi_param QUERY_STRING $query_string;
                    fastcgi_intercept_errors on;
                    # PHP 7 socket location.
                    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
            }

    }
    ## END OF Open Social

Merci

0voto

MagicAndi Points 10128

Il s'agit surtout d'un commentaire (mais l'espace est limité dans la boîte de commentaires)

J'ai réussi à faire fonctionner redmine sous le sous-répertoire mais pas le site web drupal.

Que s'est-il passé dans le navigateur lorsque vous avez essayé d'accéder aux URL de Drupal ? Que disent vos journaux ?

location ~ ^/opensocial(/.*|$) {
            alias /var/www/opensocial/html$1;

C'est horrible. Je suppose que vous voulez vraiment VRAIMENT gérer les chemins d'accès aux 2 applications indépendamment. Y a-t-il une TRÈS BONNE raison pour laquelle vous n'utilisez pas simplement

location /opensocial {

?

Bien que vous utilisiez un modèle similaire pour redmine, vous l'avez installé à un endroit différent. Je ne suis pas familier avec le fonctionnement de passenger, mais j'aurais pensé que le passenger_base_uri rendrait les regex et les alias redondants.

Personnellement, j'aurais opté pour 3 instances de serveur{} distinctes et j'aurais mis un proxy sur les ports 80 et 443 - la surcharge due au saut supplémentaire est négligeable et il y a des avantages en termes d'évolutivité, de sécurité et de gestion.

0voto

RAMIREZ Points 11

En me basant sur la réponse de @symcbean, j'ai créé un serveur proxy pour chaque application.

Mon problème actuel est la présence de 404 sur les liens internes et les ressources du site Web de Drupal, mais je suppose que c'est un problème d'application.

Voici mon nouveau serveur virtuel :

server {

        # server name and ssl stuff

        root /var/www/html;

        location /redmine {
                proxy_pass http://127.0.0.1:8000;
        }

        location /opensocial {
                proxy_pass http://127.0.0.1:8001;
        }

}

## REDMINE
server {
        listen 127.0.0.1:8000;
        root /opt/redmine/public;
        passenger_base_uri /redmine;
        passenger_app_root /opt/redmine;
        passenger_document_root /opt/redmine/public;
        passenger_enabled on;
}

## OPEN SOCIAL
server {
        listen 127.0.0.1:8001;
        root /var/www/opensocial/html;

        location / {
                try_files $uri /index.php?$query_string;
        }

        location ~ '\.php$|^/update.php' {
                fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
                # Ensure the php file exists. Mitigates CVE-2019-11043
                try_files $fastcgi_script_name =404;
                # Security note: If you're running a version of PHP older than the
                # latest 5.3, you should have "cgi.fix_pathinfo = 0;" in php.ini.
                # See http://serverfault.com/q/627903/94922 for details.
                include fastcgi_params;
                # Block httpoxy attacks. See https://httpoxy.org/.
                fastcgi_param HTTP_PROXY "";
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_intercept_errors on;
                # PHP 7 socket location.
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        }

}

N'hésitez pas à commenter s'il y a quelque chose que je peux améliorer.

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