Proxy_pass and slash witch nginx

Hello,

I set up a reverse proxy for a client with Nginx.

I still have a problem when I click on a link but the name of the
directory doesn’t end with a slash.

The proxy address is http://proxy.com and all requests are returned to
http://mydomain.com

Example: Proxy and reference works well inside
http://mydomain.com but remains on Proxy

If I remove the slash of the end I don’t have Proxy in
the address bar but http://mydomain.com/test/ (with slash at the end
because the other web server adds).

In the http headers I see a 301 but it is not handled by nginx visibly:

http://proxy.com/test

GET /test HTTP/1.1

Host: proxy.com
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101
Firefox/4.0.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip, deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 115

Connection: keep-alive

Cookie: language1=en; language2=en

HTTP/1.1 301 Moved Permanently

Server: nginx/0.7.67

Date: Wed, 18 May 2011 07:15:57 GMT

Content-Type: text/html; charset=iso-8859-1

Transfer-Encoding: chunked

Connection: keep-alive

Location: http://mydomain.com/test/

Age: 108

I thought to rewrite the rules but it might cause trouble.

If anyone has an idea on the subject, I’m interested.

Thank you

Posted at Nginx Forum:

Hello!

On Wed, May 18, 2011 at 12:11:33PM -0400, myckeul wrote:

Example: Proxy and reference works well inside

GET /test HTTP/1.1
Host: proxy.com

[…]

HTTP/1.1 301 Moved Permanently

[…]

Location: http://mydomain.com/test/

Age: 108

I thought to rewrite the rules but it might cause trouble.

If anyone has an idea on the subject, I’m interested.

http://wiki.nginx.org/HttpProxyModule#proxy_redirect

Maxim D.

Hello,

Thanks for your response but they won’t working.

Here is my conf :

nginx.conf :
user www-data;
worker_processes 1;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
# multi_accept on;
}

http {
include /etc/nginx/mime.types;

access_log  /var/log/nginx/access.log;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;
tcp_nodelay        on;

gzip  on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

}

my vhost :
server {
listen [::]:80;

   server_name proxy.com *.proxy.com;

   access_log  /var/log/nginx/proxy_.access.log;

   error_page 404 = /404.htm;

   location /404.htm {
     root /var/www;
   }

   location / {
       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;


if ($host ~* ^proxy\.com$) {
   proxy_pass http://mydomain.com;
}

if ($host ~* ^www\.proxy\.com$) {
   proxy_pass http://www.mydomain.com;
}

if ($host ~* ^subdomain\.proxy\.com$) {
   proxy_pass http://subdomain.mydomain.com;
}

proxy_redirect http://proxy.com/test http://proxy.com/test/;

}
}

and my proxy.conf file :
proxy_redirect off;
proxy_intercept_errors on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;

Thanks for your help

Posted at Nginx Forum:

hello :wink:

thank you, everything is ok now

have a nice day

Posted at Nginx Forum:

On Thu, May 19, 2011 at 04:37:38PM -0400, myckeul wrote:

Hello,

Thanks for your response but they won’t working.

   location /404.htm {
   proxy_pass http://mydomain.com;
proxy_redirect http://proxy.com/test http://proxy.com/test/;

}
}

proxy_redirect http://mydomain.com http://proxy.com;
proxy_redirect http://www.mydomain.com http://www.proxy.com;
proxy_redirect http://subdomain.mydomain.com http://subdomain.proxy.com;

BTW, your configuraiton is wrong mix of levels: you should not use
virtual host name on location level in “if ($host ~”. This leads
to cumbersome and unmaintainable configurations.
Instead you should define 3 separate servers:

server {
server_name proxy.com;
location / {
proxy_pass http://mydomain.com;
}

}

server {
server_name www.proxy.com;
location / {
proxy_pass http://www.mydomain.com;
}

}

server {
server_name subdomain.proxy.com;
location / {
proxy_pass http://subdomain.mydomain.com;
}

}


Igor S.