LiteSpeed doesn't support ProxyPass
, ProxyPassReverse
and other mod_proxy directives(starting from LSWS 5.3.6, ProxyPass
and-ProxyPassMatch
support for AJP backend have been added but not supported for non-AJP backend). However, you can use rewrite rules with [P]
and set up an external app of the proxy in LSWS configuration to make it work fully.
Add the remote proxy as an external app
1. Log in to the LSWS GUI. The default address is https://IP:7080 or http://ip:7080 for ealier verion
2. Go to Configuration → Server → External App
tab and hit Add
. The external app can also be added to virtual host level. Adding to server level is recommended.
3. Select Web Server
from the drop down list.
4. On the following page, fill in the following and hit Save:
* Name - Any unique external app name. It should not start with "http://". As the example, ''Local_proxy''. * Address - The IP:PORT or UDS socket of the backend server. It cannot be a domain name. As the example,front end is on port ''443'', and backend on ''ip:80''. Hence enter backend ''ip:80'' here. please remember do not add http:// or https://. * Max Connections - The maximum number of concurrent connections to this Web Server at any time. * Initial Request Timeout (secs) - The maximum time in seconds the server will wait for a response. * Retry Timeout (secs) - The period of time that the server waits before retrying a request.
5. After saving, restart LSWS
Use rewrite rules in .htaccess
Example 1: Proxy to a site on the backend with the same domain name.
RewriteRule (.*) http://<EXTERNAL_APP_NAME>/$1 [P]
In the above example in .htaccess:
RewriteRule (.*) http://Local_proxy/$1 [P]
Example 2: Proxy to a site on the backend with a different domain name.
RewriteRule ^(.*)$ http://<EXTERNAL_APP_NAME>/$1 [P,E=Proxy-Host:www.example.com]
The URL for the vhost should now act as a proxy for the External App Web Server that was just set up.
For the above example in .htaccess:
RewriteRule ^(.*)$ http://Local_proxy/$1 [P,E=Proxy-Host:www.example.com]
Example 3: Proxy to a site on the same server
If acting as a proxy to a site on the same server, you can use 127.0.0.1:<port>
without manually creating an external app. The rewrite rule proxy target will be created automatically if the target is using 127.0.0.1:<port>
. When using a domain, even if the domain is hosted on the same server, the external application won't be created automatically. This will lead to a 500 status code as the server cannot find the external application. You will need to create an external app manually, in this case.
For example, www.example1.com
is hosted on the same server. If you want to run the following proxy with domain, you will need to create an external app:
RewriteEngine On RewriteRule ^(.*)$ https://www.example1.com:5000/$1 [P,L]
Alternatively, simply using the following code, an external app will be created by the server automatically:
RewriteEngine On RewriteRule ^(.*)$ https://127.0.0.1:5000/$1 [P,L]
Example 4: cPanel webmail-like proxy
cPanel's www.domain.com/webmail
proxy loads one installation at http://127.0.0.1/rainloop/
.
An Apache user without a control panel who wants to copy this behavior may achieve it with ProxyPass
, like so:
ProxyPass "/webmail/" "http://127.0.0.1/rainloop/"
But LiteSpeed doesn't support ProxyPass
in this case. Instead, a LiteSpeed user may simply use the following rewrite rule in the virtual host's Apache configuration. No need to create an external app:
RewriteRule /webmail/(.*) http://127.0.0.1/rainloop/$1 [P]
Testing
From the browser,
1. Firstly Check backend: http://www.example.com to or by curl command to make sure backend running ok.
2. Secondly, Check front end: example front end is on port 443, visit https://www.example.com and it should proxy/return backend correctly.
Troubleshooting
If you see the similar error log as the following:
[REWRITE] Proxy target is not defined on external application list, please add a 'web server' with name 'https://Local_proxy'
It means the proxy “Local_proxy” not defined on external application. You need to create a web server proxy on the external application named “Local_proxy” (without http: or https: ).
if you get a 500 error code , then this can mean a lot of things
if you want to proxy to https, then please add the following first
in the adress tab ( of the app) fill in https://IP:PORT instead of IP:PORT
then in htacces you use https://PROXY/$1 instead of http://PROXY/$1