Usando o Nginx como Webserver e Reverse Proxy

1

Estou tentando configurar o Nginx como proxy reverso e servidor da Web juntos. e estou tendo problemas em tentar entender como posso fazer isso.

Vamos supor que estou usando a configuração nginx padrão do Symfony2 ( link ):

server {
    server_name example.com www.example.com;
    root /var/www/project/web;

    location / {
        # try to serve file directly, fallback to app.php
        try_files $uri /app.php$is_args$args;
    }
    # DEV
    # This rule should only be placed on your development environment
    # In production, don't include this and don't deploy app_dev.php or config.php
    location ~ ^/(app_dev|config)\.php(/|$) {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }
    # PROD
    location ~ ^/app\.php(/|$) {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
        # Prevents URIs that include the front controller. This will 404:
        # http://domain.tld/app.php/some-path
        # Remove the internal directive to allow URIs like this
        internal;
    }

    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;
}

Eu quero adicionar uma configuração para que o Nginx também funcione como um proxy reverso. e não apenas um servidor web.

  1. Preciso adicionar ao mesmo arquivo de configuração as configurações proxy_pass , proxy_cache , etc.?

  2. Preciso definir uma configuração para rotas específicas? ou desativá-los?

  3. Por exemplo, se eu não quiser que a rota /app_dev.php/abc seja armazenada em cache? o que eu preciso fazer?

por Dan Revah 24.03.2015 / 14:31

1 resposta

1

Basicamente, nginx é o servidor proxy. Seus recursos incluem HTTP, HTTPS, IMAP, POP3, SMTP e outros protocolos. Para o proxy HTTP (S), o backend pode ser um servidor FastCGI como o PHP-FPM ou outro servidor da Web.

Para o backend do FastCGI, é necessário ter o módulo fastcgi . Por exemplo, você precisa definir o back-end com fastcgi_pass . Para fazer proxy com outro website, você precisa do módulo de proxy HTTP . Você precisa usar a direção como proxy_pass , proxy_cache para controlar o comportamento deste módulo.

  1. Do I need to add to the same configuration file the proxy_pass, proxy_cache, etc.. configurations?

SIM

  1. Do I need to set a configuration for a specific routes? or to disable them?

Por exemplo, você precisa do proxy com o URL específico www.example.com/myawesomeapp e usar o local para corresponder ao URL

location /myawesomeapp {
    proxy_pass http://<upstream_block_name>;
    ... other parameter ...;
}
  1. If for example if I don't want the route /app_dev.php/abc to be cached? what do I need to do?

Use proxy_cache_bypass . Você pode definir por if diretiva como este tutorial .

    
por 25.03.2015 / 22:04