when accessing: http://example.com/somefolder --> http://example.com:8080/somefolder
I have tried this:
http {
port_in_redirect off;
Any ideas?
Server Fault is a question and answer site for system and network administrators. It only takes a minute to sign up.
Sign up to join this communitywhen accessing: http://example.com/somefolder --> http://example.com:8080/somefolder
I have tried this:
http {
port_in_redirect off;
Any ideas?
I just ran into the same problem and port_in_redirect off;
actually worked for me, just make sure you use it inside the server {}
block.
server {
listen 8080;
server_name example.com;
port_in_redirect off;
autoindex on;
location / {
root /var/www/example.com;
index index.html;
}
}
This should fix problem. Add proxy_redirect
directive right after proxy_pass
directive
proxy_redirect http://example.com:8080/ http://example.com/;
If someone is still experiencing this problem while having apache behind nginx reverse proxy setup, you could try the ff:
location / { proxy_redirect off; proxy_set_header Host $host:$server_port; # <-- this one solved mine proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8083; }
My setup is that I let Apache listen to 127.0.0.1:8083 and let nginx proxy requests to it.
I had the same problem with my nginx + Apache setup. Apache seems to be redirecting to it's own port (running on 8080), while nginx is on port 80.
In my setup, this made infinite redirect loop for normal urls:
proxy_set_header Host $host:80; # Force port 80
Instead bind the returning data to port 80, like this:
proxy_bind $host:80; # Bind to port 80
Here is my nginx server block:
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name _; # Wildcard server
location / {
proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
proxy_pass http://localhost:8080;
proxy_set_header Host $host; # Pass host header
proxy_set_header X-Real-IP $remote_addr; # Preserve client IP
proxy_set_header X-Forwarded-For $remote_addr;
}
}
With this wildcard setup, all requests nginx does not have a server block for is passed on to Apache.
I think this simple example is enough:
location = /somefolder {
return 302 http://$host:8080/somefolder;
}
In case anyone else was having this issue - the article here: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ solved the problem for me.
I had to add an extra header in the proxy.
Make sure you have the Host set to $http_host
and also that you have set the X-Forwarded-Host
to $http_host
like below:
proxy_redirect off;
proxy_set_header Host $http_host; # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;
http://wiki.codemongers.com/NginxHttpCoreModule#port_in_redirect
syntax: port_in_redirect [ on|off ]
default: port_in_redirect on
context: http, server, location
Hope this is what you are looking for.
I had a similar problem.
Maybe you should use directive proxy_set_header
to set the headers' host and location. In my configuration I added proxy_set_header Location $host:80
; and all the requests return port 80 now.
This issue is caused by Nginx auto translate relative path to absolute path, right?
There is a way to tell Nginx not translate, you add a space before slash:
ngx.redirect(" /foo")
I would recommend instead adding this to your server block:
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
This was when you go to example.com/wp-admin it will go to example.com/wp-admin rather than going to example.com:8080/wp-admin/ and if you are on CloudFlare DNS for instance it will say the site is down.
I'm using Ubuntu, Nginx and Varnish and this works perfectly now rather than disabling port_in_redirect.
To add, be sure to to restart nginx after:
sudo service nginx restart
server
block which contains theproxy_pass
directive. What you're probably going to need will be aproxy_redirect
directive - seeing your config should confirm.port_in_redirect
fromon
tooff
you may need to restart it.port_in_redirect
doesn't work at all