PDA

View Full Version : [SERVER_PORT] when using proxy-server


xendex
06-29-2009, 12:48 PM
I'm using Litespeed SE(as backend for scripts, on port 8080), nginx(as frontend proxy-server, on port 80) and PHP LSAPI, where each site(domain) has own vhost, php.ini, listener with own port(8081, 8082...)
And the problem is that some php-scripts(like phpBB3, phpMyAdmin) are using port(requesting it by _SERVER['SERVER_PORT']) in the redirection URL if it's not 80 by default - so URL redirects like http://mysite.com:8081/blah.php?=blah...... lead to an error.
So is there any way to return port 80(in _SERVER['SERVER_PORT']) dy default for all vhosts instead of port mentioned in the listener for this vhost(i.e. 8081, 8082, 8083...)? And does this have to be done on Litespeed, nginx or PHP level?
I will be glad to listen to any helpful solution.

Thanks in advance!

P.S. If it'll be useful, here's example nginx config, that I'm using for each vhost:

server {
listen 80;
server_name mysite.com;

location / {
proxy_pass http://127.0.0.1:8081/;
proxy_redirect off;
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;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}

# Static files location

location ~* ^.+.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|x ls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {

root /home/somesites/domains/mysite.com/public_html/;

}



error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

location ~ /.ht {
deny all;
}
}

slene
06-09-2012, 10:36 PM
the apache setting:

UseCanonicalName Off
UseCanonicalPhysicalPort Off

cannot work.

the port always use listen port, not client port.

Anyone have a solution for this?

webizen
06-11-2012, 02:11 PM
a few things to note:
1. LSWS Stand Edition only reads up to 5 vhosts from Apache httpd.conf. If you have more vhosts than that, you will be unable to server others vhosts.
2. make sure LSWS listener is on 127.0.0.1:8081 (or any IP:8081).
3. _SERVER['SERVER_PORT'] is PHP environment variable. in your case, it will reflect the port backend server LSWS listens on (i.e., 8081).

slene
06-12-2012, 12:28 AM
In my case.

When I use apache as a backend server. and nginx as proxy.

1. apache listener 8081, nginx listener 80.
2. apache settings
UseCanonicalName Off
UseCanonicalPhysicalPort Off
3. use mod_rpaf to set real ip from HTTP-X-REAL-IP
4. the php env $_SERVER['SERVER_PORT'] is 80

When I use litespeed as a backend server. and nginx as proxy.

1. litespeed listener 8081, nginx listener 80.
2. and litespeed set Use Client IP in Header for set real ip
3. UseCanonicalName and UseCanonicalPhysicalPort cannot work in litespeed.
4. the php env $_SERVER['SERVER_PORT'] always is 8081.

Can litespeed fix this problem in new version ?

webizen
06-12-2012, 03:52 PM
Why not use LSWS as frontend instead?