Set up OpenLiteSpeed as a Reverse Proxy for a Node.js App¶
In this guide, we will set up OpenLiteSpeed (OLS) as a reverse proxy for a Node.js application. In our example, we will use the Docker compose method. If you already have an app started as a container, then you can skip right to Set up OpenLiteSpeed as a Proxy.
Set up Node.js¶
Download the OLS Docker stack and change to the ols-docker-env
directory:
git clone https://github.com/litespeedtech/ols-docker-env.git; cd ols-docker-env
Follow the official Docker instructions to create a simple Node.js application.
The folder name will be node-docker
, and the structure will look like this:
.
├── LICENSE
├── README.md
├── acme
├── bin
├── data
│ └── db
├── docker-compose.yml
├── logs
├── lsws
│ ├── admin-conf
│ └── conf
└── node-docker
├── Dockerfile
├── node_modules
├── package.json
└── server.js
Test the application:
curl --request POST \
--url http://localhost:8000/test \
--header 'content-type: application/json' \
--data '{"msg": "testing" }'
The output should look like this:
{"code":"success","meta":{"total":3,"count":3},"payload":[{"id":"27b1a4fd-7fa0-45ec-90de-37771a98a193","createDate":"2022-04-08T06:54:30.225Z"},{"id":"59dad706-e6c7-4bc8-af6e-b2a97c05abd2","createDate":"2022-04-08T06:54:30.233Z"},{"msg":"testing","id":"ccd2da12-f28f-4e52-b6aa-418aa3a44184","createDate":"2022-04-08T06:54:34.918Z"}]}
Edit docker-compose.yml
and include the following content:
version: '3'
services:
litespeed:
image: litespeedtech/openlitespeed:${OLS_VERSION}-${PHP_VERSION}
env_file:
- .env
volumes:
- ./lsws/conf:/usr/local/lsws/conf
- ./lsws/admin-conf:/usr/local/lsws/admin/conf
- ./bin/container:/usr/local/bin
- ./sites:/var/www/vhosts/
- ./acme:/root/.acme.sh/
- ./logs:/usr/local/lsws/logs/
ports:
- 80:80
- 443:443
- 443:443/udp
- 7080:7080
restart: always
environment:
TZ: ${TimeZone}
network_mode: "host"
nodejs:
image: nodejs
build: node-docker/.
environment:
- NODE_ENV=production
ports:
- 8000:8000
Set up OpenLiteSpeed as a Proxy¶
Using the official OLS as Reverse Proxy guide, we can set up OLS by creating an external app, and adding rewrite rules.
Create a Web Server External Application¶
Log in to the OLS WebAdmin Console. To set up a server-level external application, navigate to Server Configuration > External App > Add > Type. Give it the following values:
- Name =
nodejs
- Address =
localhost:8000
- Max Connections =
100
- Initial Request Timeout =
60
- Retry Timeout =
0
- Response Buffering =
No
Add Proxying Rewrite Rules¶
Navigate to Virtual Host Templates > docker > Rewrite > Rewrite Rules > Add and add a set of rewrite rules, like these:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ HTTP://nodejs/$1 [P,L,E=PROXY-HOST:www.example.com]
RewriteRule ^(.*)$ HTTPS://nodejs/$1 [P,L,E=PROXY-HOST:www.example.com]
www.example.com
with the address of your OLS server. Verify¶
Use curl command to check the server is served by LiteSpeed.
curl -I https://www.example.com/test
The output should look like this:
HTTP/2 200
x-powered-by: Express
access-control-allow-origin: *
content-type: application/json; charset=utf-8
etag: W/"1b3-MxQbaP1S3gmyG6akl7lrj8F0CMY"
server: LiteSpeed
alt-svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46"