Nginx: problem configuring a proxy_pass

nginxproxypass

I'm converting a web app from apache to nginx.
In apache's httpd.conf I have:

ProxyPass /proxy/ http://
ProxyPassReverse /proxy/ http://

The idea is the client send this url:

http://web-server-domain/proxy/login-server-addr/loginUrl.php?user=xxx&pass=yyy

and the web server calls:

http://login-server-addr/loginUrl.php?user=xxx&pass=yyy

My nginx.conf is attached below and it is not working. At the moment it looks like it is calling the server, but returning an application error.
This seems promising but any attempt to debug this failed!
I can't trace any of the calls as nginx refuses to place them in the error file.
Also, placing echo statement on the login server did not help either which is weird.

The nginx documentation isn't very helpful about this.

Any suggestion on how to configure a proxy_pass?

Thanks!

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        /var/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;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

#
# The default server
#
server {
     rewrite_log on;

    listen       80;
    server_name  _;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

#root /var/www/live/html;
index  index.php index.html index.htm;

   location ~ ^/proxy/(.*$) {
#location /proxy/ {
#   rewrite ^/proxy(.*) http://$1 break;
    proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffering off;
          proxy_pass http://$1;
    #proxy_pass "http://173.231.134.36/messages_2.7.0/loginUser.php?userID=ofer.fly%40gmail.com&password=y4HTD93vrshMNcy2Qr5ka7ia0xcaa389f4885f59c9";
    break;
   }

   location / {
    root /var/www/live/html;

    #if ( $uri ~ ^/proxy/(.*) ) {
        #   proxy_pass http://$1;
    #   break;
        #}

    #try_files  $uri $uri/ /index.php;
   }

    error_page  404              /404.html;
    #location = /404.html {
    #    root   /usr/share/nginx/html;
    #}

    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #    root   /usr/share/nginx/html;
    #}

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        #root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name; 
        fastcgi_param  SCRIPT_FILENAME  /var/www/live/html$fastcgi_script_name; 
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

# Load config files from the /etc/nginx/conf.d directory
include /etc/nginx/conf.d/*.conf;

}

Best Answer

Okay, I tried this on my nginx testbed and got the following in the log:

2011/08/29 22:35:31 [error] 10074#0: *1257 no host in upstream "", client: 10.103.0.9, server: localhost, request: "GET /proxy/ya.ru HTTP/1.1", host: "10.110.0.42"

So, nginx is just not a right tool to do that, upstream hosts can't be defined at runtime.