usando o servidor nginx único para servir / proxy PHP, Python e NodeJS

1

Estou tentando descobrir a melhor forma de usar o Nginx como proxy para servir PHP (via PHP5-FPM), Python (via gunicorn) e NodeJS. Meu arquivo padrão atual no diretório de sites disponíveis é copiado abaixo. Devo tentar configurar vários servidores ou fazer outras alterações para habilitar essa funcionalidade? Desde já, obrigado.

Atualização:  Atualmente, com a configuração atual, o Nginx está servindo como um proxy para o aplicativo NodeJS. No entanto, ele não está mais servindo ao conteúdo PHP. Devo estar usando um servidor diferente no arquivo padrão e, em caso afirmativo, devo ser capaz de usar a mesma porta de escuta, mas apenas usar um server_name diferente e usar a tag de localização para diferenciar entre as solicitações?

Estou tentando rotear determinadas solicitações de URL para um aplicativo PHP (em / var / www - troquei de / usr / share / nginx), bem como para back-ends em Python e Nodejs.

Um pensamento que eu não implementei é tentar vários upstream e ter a configuração do PHP no servidor principal - isso funcionaria, ou seja, ter um upstream para o NodeJS, um para o Python e o servidor para o PHP.

upstream test {
        server 0.0.0.0:3002;
        keepalive 500;
}


server {
        listen 81 default_server;
        listen [::]:81 default_server; ##remove this?

        root /var/www/;  ##switched from /usr/share/nginx
        index index.php index.html index.htm;

        server_name localhost; 

        location / {
                proxy_redirect off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Host $http_host;
                proxy_set_header X-Nginx-Proxy true;
                proxy_set_header Connection "";
                proxy_http_version 1.1;
                proxy_pass http://0.0.0.0:3002;
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                allow ::1;
                deny all;
        }

        # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
        location /RequestDenied {
                proxy_pass http://127.0.0.1:4242;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
server {
        listen 82;
        root /var/www/;
        index index.php index.html index.htm;
        server_name php;
        location ~ /testPHP {    //testPHP is part of URL/directory name in /var/www/
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

}
    
por ali haider 12.12.2013 / 18:42

2 respostas

2

Não tenho certeza se essa foi a melhor maneira de abordar, mas isso me ajudou a alcançar o que eu queria. Eu simplesmente criei uma nova configuração de servidor para o proxy e usei um servidor para servir conteúdo php.

upstream test {
        server 0.0.0.0:3002;
        keepalive 500;
}


server {
        listen 81 default_server;
        listen [::]:81 default_server; ##remove this?

        root /var/www/;  ##switched from /usr/share/nginx
        index index.php index.html index.htm;

        server_name localhost; 

        location / {
                proxy_redirect off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Host $http_host;
                proxy_set_header X-Nginx-Proxy true;
                proxy_set_header Connection "";
                proxy_http_version 1.1;
                proxy_pass http://0.0.0.0:3002;
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                allow ::1;
                deny all;
        }

        # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
        location /RequestDenied {
                proxy_pass http://127.0.0.1:4242;
        }
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
server {
        listen 82;
        root /var/www/;
        index index.php index.html index.htm;
        server_name php;

        location / {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

} 
    
por 26.12.2013 / 21:43
2

Eu estava procurando uma solução semelhante, servindo PHP usando FastCGI no Nginx junto com um servidor NodeJS. No entanto, eu queria atender todas as solicitações do mesmo domínio e porta. Eu me decidi por solicitações de proxy com base na localização, em vez de ter servidores separados.

Este exemplo usa upstream:

upstream nodejs {
    server 127.0.0.1:8080 max_fails=0;
}

server {     
    listen 80;
    server_name _;
    set $root /var/www/sitename;
    root $root;
    index.php index index.html;

    access_log /var/www/sitename/logs/access.log;
    error_log /var/www/sitename/logs/error.log;

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:8888;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $root/$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_script_name;

        include /etc/nginx/fastcgi_params;

        if (!-e $request_filename) {
            rewrite ^(.+)$ /index.php?q=$1 last;
            break;
        }
    }

    location /nodejs/ {
        proxy_pass  http://nodejs;
        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 ;
    }
}

Eu achei este artigo útil e esse código é menos um clone:

link

    
por 15.06.2014 / 10:26

Tags