拓展内容
此部分内容将说明一些额外的操作流程,根据自己需要进行配置。
反向代理
在这里提供双域名(前端和后端各用一个域名)与单域名(前后端共用一个域名)的配置步骤。
当然不管使用哪种方法,都建议用控制面板(如宝塔、1Panel 等)的使用面板提供的反代功能单独粘贴对应的反代配置部分完成配置(需要删掉开头和结尾的 server 块),手写反代配置的大佬随意。
双域名
这里假定前端域名为 www.example.com
,后端为 server.example.com
。
以下是后端 server.example.com
反代配置部分
server {
## 反向代理开始
## WebSocket
location /socket.io {
proxy_pass http://127.0.0.1:2333/socket.io;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_http_version 1.1;
add_header Cache-Control no-cache;
}
## Others
location / {
proxy_pass http://127.0.0.1:2333;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
}
## 反向代理结束
}
前端 www.example.com
反代部分
server{
location ~* \.(gif|png|jpg|css|js|woff|woff2)$ {
proxy_pass http://127.0.0.1:2323;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
expires 30d;
}
location ~* \/(feed|sitemap|atom.xml) {
proxy_pass http://127.0.0.1:2333/$1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control max-age=60;
}
location / {
proxy_pass http://127.0.0.1:2323;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_intercept_errors on;
}
}
如果您使用此部分示例配置 Nginx 反向代理,您的:
- API 地址为
https://server.example.com/api/v2
- 前端(Kami/Shiro)地址为
https://www.example.com
- GateWay 为
https://server.example.com
- 后台为
https://server.example.com/qaqdmin
- 本地后台为
https://server.example.com/proxy/qaqdmin
单域名
以下配置文件以 Nginx 为例,请自行修改 SSL 证书路径以及自己的网站域名。
若使用 Caddy 进行配置可参考 Caddyfile 文件示例 (opens in a new tab)进行相应修改。
server {
## 反向代理开始
## WebSocket 地址
location /socket.io {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:2333/socket.io;
}
## API 地址
location /api/v2 {
proxy_pass http://127.0.0.1:2333/api/v2;
}
## 简读 render 地址
location /render {
proxy_pass http://127.0.0.1:2333/render;
}
## Kami 地址
location / {
proxy_pass http://127.0.0.1:2323;
}
## 后台地址
location /qaqdmin {
proxy_pass http://127.0.0.1:2333/qaqdmin;
}
## 本地后台地址
location /proxy {
proxy_pass http://127.0.0.1:2333/proxy;
}
## RSS 地址
location ~* \/(feed|sitemap|atom.xml) {
proxy_pass http://127.0.0.1:2333/$1;
}
## 反向代理结束
}
完整示例如下
server {
listen 80;
listen 443 ssl http2 ;
## 绑定域名
server_name www.example.com;
index index.html;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
error_log /www/sites/www.example.com/log/error.log;
access_log /www/sites/www.example.com/log/access.log;
location /socket.io {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:2333/socket.io;
}
location /api/v2 {
proxy_pass http://127.0.0.1:2333/api/v2;
}
location /render {
proxy_pass http://127.0.0.1:2333/render;
}
location / {
proxy_pass http://127.0.0.1:2323;
}
location /qaqdmin {
proxy_pass http://127.0.0.1:2333/qaqdmin;
}
location /proxy {
proxy_pass http://127.0.0.1:2333/proxy;
}
location ~* \/(feed|sitemap|atom.xml) {
proxy_pass http://127.0.0.1:2333/$1;
}
ssl_certificate /www/sites/www.example.com/ssl/fullchain.pem;
ssl_certificate_key /www/sites/www.example.com/ssl/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
limit_conn perserver 300;
limit_conn perip 25;
limit_rate 512k;
}
如果您使用此部分示例配置 Nginx 反向代理,您的:
- API 地址为
https://www.example.com/api/v2
- 前端(Kami/Shiro)地址为
https://www.example.com
- GateWay 为
https://www.example.com
- 后台为
https://www.example.com/qaqdmin
- 本地后台为
https://www.example.com/proxy/qaqdmin
配置其他 Redis 服务
如果你需要使用来自 (远端 / 非容器) 的 Redis 服务,你可以通过使用 argv
来动态传入对应的配置项。
支持传入如下值:
redis_host
Redis 服务地址,域名、IP 都可以redis_port
Redis 服务端口redis_password
Redis 服务密码
在默认情况下,我们认为这样已经足够了。
对于进阶部署
针对这种部署方式,我们可以修改 ecosystem.config.js
在 12 行,也就是 script
这一项,添加你需要传入的值,如下所示:
const { cpus } = require('os')
const { execSync } = require('child_process')
const nodePath = execSync(`npm root --quiet -g`, { encoding: 'utf-8' }).split(
'\n',
)[0]
const cpuLen = cpus().length
module.exports = {
apps: [
{
name: 'mx-server',
- script: 'out/index.js,
+ script: 'out/index.js --redis_host=远端地址 --redis_password=redis?passwd',
autorestart: true,
exec_mode: 'cluster',
当你修改完成,你需要重新构建,并重启服务:
pnpm bundle
pnpm prod:pm2
配置其他 MongoDB 服务
如果你需要使用来自 (远端 / 非容器) 的 MongoDB 服务,你可以通过使用 argv
来动态传入对应的配置项。
支持传入如下值:
collection_name
数据库集合名字db_host
MongoDB 服务地址,域名、IP 都可以db_port
MongoDB 服务端口db_user
MongoDB 服务用户名db_password
MongoDB 服务密码
如果你需要使用密码登录,你不仅仅需要传入 password,还需要传入 user,建议你对数据库集合划分好用户权限
对于进阶部署
和 Redis 一样,我们可以修改 ecosystem.config.js
在 12 行,也就是 script
这一项,添加你需要传入的值,如下所示:
const { cpus } = require('os')
const { execSync } = require('child_process')
const nodePath = execSync(`npm root --quiet -g`, { encoding: 'utf-8' }).split(
'\n',
)[0]
const cpuLen = cpus().length
module.exports = {
apps: [
{
name: 'mx-server',
+ script: 'out/index.js --db_host=远端地址 --db_user=mongodb-test --db_password=db?passwd',
autorestart: true,
exec_mode: 'cluster',
当你修改完成,你需要重新构建,并重启服务:
pnpm bundle
pnpm prod:pm2