zataived
zataived

Reputation: 83

Removing port from nginx redirect

I'm having an issue where some redirects on a website have the proxy-pass port included, rendering them useless. My configuration is as follows:

Physical server 1:

server {
    server_name example.com www.example.com;

    location / {
            proxy_pass              http://1.1.1.1:50493;
            proxy_set_header        X-Real-IP  $remote_addr;
            proxy_set_header        Host "example.com";
    }
}

Physical Server 2:

server {
            listen 50493;
            server_name example.com www.example.com;

            set_real_ip_from    1.1.1.1;

            root /var/www/example.com;
            index index.php index.htm index.html;

            location / {
                    if ($http_host !~ "^example.com"){
                            set $rule_0 1$rule_0;
                    }
                    if ($rule_0 = "1"){
                            rewrite ^/(.*) http://example.com/$1 permanent;
                    }
                            rewrite /[^/]+/([0-9]+)-[^/]+.html http://example.com/showthread.php?t=$1 permanent;
            }

            location ~ .php$ {
              fastcgi_pass   127.0.0.1:9000;
              fastcgi_index  index.php;
              fastcgi_param  SCRIPT_FILENAME /var/www/example.com$fastcgi_script_name;
              include fastcgi_params;
              fastcgi_read_timeout 600s;
              fastcgi_buffer_size 512k;
              fastcgi_buffers 16 512k;
            }
   }

Generally, browsing works fine. The site is browsable as one expects. However some links that redirect (eg. after a login action), redirect to a link with the port 50493 included. So we get http://example.com:50493/index.php for example. That will not work. My question is, how do I remove the port?

From what I can tell, the forum software takes the port from the php session port variable. I've tried setting port_in_redirect off but to no avail. If it helps, the issue highlighted here: http://kb.parallels.com/en/114425 is similar.

Thank you.

Upvotes: 4

Views: 6153

Answers (3)

user2596118
user2596118

Reputation:

in your nginx.conf

http {

port_in_redirect off;

}

Upvotes: 5

José Montiel
José Montiel

Reputation: 373

try substitution on the fly

HttpSubModule

sub_filter      
  'example.com:50493/' 'example.com/' ;
sub_filter_once off;

this should do the trick.

Upvotes: 0

Danack
Danack

Reputation: 25701

It tells you how to fix your issue in the link you provided. Change:

<?php echo $VAR->domain->asciiName ?>:<?php echo $OPT['ssl'] ? $VAR->server->webserver->httpsPort : $VAR->server->webserver->httpPort ?>"

to

<?php echo $VAR->domain->asciiName ?>"

You have to fix this in your application rather than in Nginx.

Your application is generating links that point to port 50493 like this. Unless you're going to setup a content filter that goes through all of the HTML and replaces example.com:50493/path/of/url with example.com/path/of/url then you have to fix it inside the application.

Upvotes: 0

Related Questions