3 votes

Nginx. Configurer deux sites sur le même port

J'essaie d'ajouter un site wikimedia sur mon serveur, qui contient déjà un autre site (qui n'utilise pas PHP). Je veux le mettre dans un dossier différent comme www.hostname.com/wiki mais il serait merveilleux d'avoir deux fichiers de conf différents pour éviter de mélanger les choses. En ce moment, j'essaie de mettre ce site wikimedia sur un port différent, le 81, et j'ai quelques problèmes.

Mon nginx.conf ressemble à ça :

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    index   index.html index.htm index.php;
    include /etc/nginx/conf.d/*.conf;

}

Et dans le dossier conf.d, j'ai deux fichiers :

site.conf qui ressemble à ceci :

server {
    listen 80;

    server_name hostname.com;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.users;

    location /kibanaadmin/ {
        proxy_pass http://localhost:5601/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    root /usr/share/nginx/html/pruebas/site;
    index index.php index.html index.htm;

    try_files $uri $uri/ /index.php?$args;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Et wiki.conf fichier :

server {

        listen 81;

        server_name hostname.com;

        root /usr/share/nginx/html/tests/mediawiki;

        client_max_body_size 5m;
        client_body_timeout 60;

        index index.html index.htm index.php;

        location / {
                try_files $uri $uri/ @rewrite;
                autoindex on;
                index index.html index.html index.php;
        }

        location @rewrite {
                rewrite ^/(.*)$ /index.php?title=$1&$args;
        }

        location ^~ /maintenance/ {
                return 403;
        }

        location ~ \.php$ {
                autoindex on;
                include fastcgi_params;
                fastcgi_pass unix:/tmp/phpfpm.sock;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                try_files $uri /index.php;
                expires max;
                log_not_found off;
        }

        location = /_.gif {
                expires max;
                empty_gif;
        }

        location ^~ /cache/ {
                deny all;
        }

        location /dumps {
                root /usr/share/nginx/html/tests/mediawiki/local;
                autoindex on;
        }
}

J'ai remarqué deux problèmes différents :

La première est que, lorsque j'essaie de récupérer un fichier php, j'obtiens un 502 Bad Gateway et sur le error.log j'obtiens ce message :

2015/07/15 10:56:57 [crit] 16306#0 : *6 connect() to unix:/var/run/php-fpm/php-fpm.sock a échoué (2 : No such file or répertoire) lors de la connexion à upstream, client : 111.222.333.444, serveur : hostname.com, requête : "GET /info.php HTTP/1.1", upstream : "fastcgi://unix:/var/run/php-fpm/php-fpm.sock :", hôte : "hostname.com"

J'ai vérifié ma configuration php et je pense qu'elle est correcte, je ne sais pas si c'est un problème de configuration nginx ou PHP.

Le deuxième problème est que lorsque je vais sur hostname.com:81 j'obtiens et 403 Interdit (mon autre site dans hostname.com:80 fonctionne sans problème) et ce message de journal :

2015/07/15 10:59:15 [error] 16306#0 : *9 directory index of

"/usr/share/nginx/html/pruebas/" est interdit, client : 111.222.333.444, serveur : hostname.com, requête : "GET / HTTP/1.1", hôte : "hostname.com:81"

Ma question principale est la suivante : comment puis-je faire pour que le site wikimedia soit sur le port 80 ainsi que mon site, mais en utilisant deux fichiers de conf de nginx pour le faire (si ce n'est pas possible, comment puis-je le faire avec un seul fichier) et configurer correctement le truc PHP dans nginx ?

Note : Je pense que ce n'est pas un problème de permissions car j'ai donné les mêmes droits au site wikimedia qu'à l'autre site. J'utilise Centos 7.1. Merci d'avance.

1voto

Tero Kilkanen Points 32968

Une option pour avoir les configurations dans des fichiers séparés est d'utiliser include directive. Quelque chose comme ça :

server {
    listen 80;

    server_name hostname.com;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.users;

    location /kibanaadmin/ {
        proxy_pass http://localhost:5601/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    root /usr/share/nginx/html/pruebas/site;
    index index.php index.html index.htm;

    try_files $uri $uri/ /index.php?$args;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    include '/path/to/wiki.conf';
}

Et votre wiki.conf ressemblerait à ceci :

location /wiki {
    alias /usr/share/nginx/html/tests/mediawiki;
    try_files $uri $uri/ @rewrite;
    autoindex on;
    index index.html index.html index.php;
}

location @rewrite {
    rewrite ^/(.*)$ /index.php?title=$1&$args;
}

location ^~ /maintenance/ {
    return 403;
}

location ~ \.php$ {
    autoindex on;
    include fastcgi_params;
    fastcgi_pass unix:/tmp/phpfpm.sock;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    try_files $uri /index.php;
    expires max;
    log_not_found off;
}

location = /_.gif {
    expires max;
    empty_gif;
    }

    location ^~ /cache/ {
            deny all;
    }

    location /dumps {
            root /usr/share/nginx/html/tests/mediawiki/local;
            autoindex on;
    }
}

0voto

Johnny Lee Points 13

Merci pour vos réponses. J'ai résolu les deux problèmes. Le premier problème était le 502 Bad Gateway et je l'ai résolu en réinstallant les modules PHP et en écrivant la bonne configuration sur les fichiers nginx (vérifiez la partie location ~* .php$ dans le bloc location wiki).

J'ai finalement utilisé un seul fichier de configuration, en écrivant un nouveau fichier emplacement et aussi l'écriture de la configuration PHP dans le bloc droite manière.

Le deuxième problème (403) a également été résolu en utilisant ce fichier.

server {
    listen 80;

    server_name hostname;

    location /admin/ {

        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/htpasswd.users;

        root /usr/share/nginx/html/pruebas/admin;
        index index.php index.html index.htm;

        proxy_pass http://localhost:5601/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    }

    # the following line is responsible for clean URLs
    try_files $uri $uri/ /index.php?$args;

    location /site {
        alias /usr/share/nginx/html/site;
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/htpasswd.users;
    }

    location /wiki {

        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/wiki/htpasswd;

        alias /usr/share/nginx/html/mediawiki;

        location ~* \.php$ {
          fastcgi_pass    127.0.0.1:9000;
          include         fastcgi.conf;
          fastcgi_param   SCRIPT_FILENAME $request_filename;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico|xml)$ {
            expires 1y;
                access_log off;
                log_not_found off;
        }
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}

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