Nginx. Config dois sites na mesma porta

1

Estou tentando adicionar um site wikimedia no meu servidor, que já tem outro site (que não usa PHP) nele. Eu quero colocá-lo em uma pasta diferente, como www.hostname.com/wiki , mas seria maravilhoso ter dois arquivos conf diferentes para evitar misturar coisas. No momento, estou tentando colocar este site da wikimedia em uma porta diferente, a 81, e tendo alguns problemas.

Meu nginx.conf tem esta aparência:

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;

}

E na pasta conf.d eu tenho dois arquivos:

site.conf que se parece com isso:

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;
    }
}

E arquivo wiki.conf :

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;
        }
}

Eu notei dois problemas diferentes:

O primeiro é que quando eu tento obter um arquivo php eu recebo um 502 Bad Gateway e no error.log eu recebo esta mensagem:

2015/07/15 10:56:57 [crit] 16306#0: *6 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 111.222.333.444, server: hostname.com, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "hostname.com"

Eu verifiquei minha configuração do php e acho que está correto, não sei se é um problema de configuração do nginx ou um PHP.

O segundo problema é que quando eu vou para hostname.com:81 eu recebo e 403 Forbidden (meu outro site em hostname.com:80 funciona sem problemas) e esta mensagem de log:

2015/07/15 10:59:15 [error] 16306 # 0: * índice de diretório 9

"/usr/share/nginx/html/pruebas/" is forbidden, client: 111.222.333.444, server: hostname.com, request: "GET / HTTP/1.1", host: "hostname.com:81"

Minha principal questão é: Como posso conseguir ter o site wikimedia na porta 80, bem como meu site, mas usando dois arquivos conf de nginx para fazê-lo (se não for possível, como posso fazê-lo com apenas um arquivo) e configurar corretamente as coisas do PHP no nginx?

Nota: Eu acho que não é um problema de permissões porque eu dei o mesmo para o site da wikimedia como o outro site tem. Estou usando o Centos 7.1. Agradeço antecipadamente.

    
por Carlos Vega 15.07.2015 / 11:25

2 respostas

0

Obrigado pelas suas respostas. Eu resolvi os dois problemas. O primeiro problema foi o 502 Bad Gateway e resolvi reinstalando os módulos PHP e escrevendo a configuração apropriada nos arquivos nginx (confira a localização ~ * .php $ part no bloco de localização do wiki).

Eu finalmente usei apenas um arquivo de configuração, escrevendo um novo bloco location e também escrevendo a configuração do PHP na maneira direita .

O segundo problema (403) também foi resolvido usando este arquivo.

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;
    }

}
    
por 20.07.2015 / 17:07
1

Uma opção para ter as configurações em arquivos separados é usar a diretiva include . Algo parecido com isto:

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';
}

E o seu wiki.conf ficaria assim:

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;
    }
}
    
por 15.07.2015 / 12:14