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: http://proxy.com/test/ 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.

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.