1

I am trying to setup Nginx as a reverse proxy and webserver together. and I'm having issues in trying to understand how I can do it.

Let's assume I am using the default Symfony2 nginx configuration (http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html):

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

I want to add a configuration so the Nginx will also function as a reverse proxy. and not only a webserver.

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

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

  3. If for example if I don't want the route /app_dev.php/abc to be cached? what do I need to do?

masegaloeh
  • 17,978
  • 9
  • 56
  • 104
D_R
  • 113
  • 5
  • Add an `upstream` block for the destination you want to forward to, then add a second `server` block with the proxy configuration inside (the minimal config is `location / { proxy_pass http://; }`. –  Mar 24 '15 at 15:26
  • but this configuration is my Webserver as well.. so what do you mean by redirect? – D_R Mar 24 '15 at 15:36

1 Answers1

1

Basically nginx is proxy server. Its capabilities include proxy HTTP, HTTPS, IMAP, POP3, SMTP and other protocols. For HTTP(S) proxy, the backend can be either FastCGI server like PHP-FPM or another web server.

For FastCGI backend like you need fastcgi module. For example, you need to define the backend with fastcgi_pass. For proxying another website, you need HTTP proxy module. You need to use direction like proxy_pass, proxy_cache to control the behaviour of this module.

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

YES

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

For example, you need proxy the the specific URL www.example.com/myawesomeapp, then use location to match the 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. You can set by if directive like this tutorial.

masegaloeh
  • 17,978
  • 9
  • 56
  • 104