反向代理配置指南
本文档详细介绍如何在反向代理环境下配置Ltranslate翻译服务。
一、反向代理服务器
Ltranslate 支持任意反向代理的服务(例如CDN、缓存服务器、负载均衡等),均可使用本站服务。只需要配置以下关键信息即可。
配置参数:
1.反向代理服务器的地址:http://engine.ltranslate.cn
2.通过Header携带HOST:engine.ltranslate.cn
3.通过Header携带api-key:xxxxxxx
4.通过Header携带source-lang:源站语言,例如:zh-cn、en等(为空时将自动获取)
5.通过Header携带target-lang:目标语言,例如:ru、ja等
6.通过Header携带url:要进行翻译的目标URL,例如:/2025/03/28/hello-world/
二、通过Http提交
你也可以通过http请求轻松实现翻译的接入。这里提供一个基于php的运行示例。
要运行上述示例,你还需要在服务层做反向代理。以下为nginx的配置示例。
Nginx配置示例:
location ~ ^/(en|zh-cn|af|am|an|ar|as|az|be|bg|bn|bo|bs|ca|ceb|cs|cy|da|de|dsb|dz|el|eo|es|et|eu|fa|fi|fr|fur|fy|gd|gl|gu|haz|he|hi|hr|hsb|hu|hy|id|is|it|ja|jv|ka|kab|kk|km|kn|ko|ku|ky|lo|lt|lv|mk|ml|mn|mr|ms|my|nb|ne|nl|zh-tw|ru)/(.*)$ {
proxy_pass http://127.0.0.1/ltranslate/index.php?target-lang=$1&path=$2;
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 X-Forwarded-Proto $scheme;
}
配置说明:
- 正则捕获组:
- $1 表示语言代码(如 en、zh-CN 等)。
- $2 表示去掉语言前缀后的原始路径。
- proxy_pass:将请求代理至本地PHP文件,由该文件与Ltranslate翻译服务完成通信。
- proxy_set_header:
- Host:设置上游主机名。
- X-Real-IP、X-Forwarded-For:传递真实客户端地址。
- X-Forwarded-Proto:传递请求协议。
- cachetime:缓存能加速页面,以秒为单位,默认864000
- deletecache:是否删除缓存,1为删除,默认0
提示:上述代码的目的是,把 https://xx.com/zh-cn 代理到 /ltranslate/index.php 文件(这个文件的位置,你可随意放),由该文件跟Ltranslate翻译服务完成通信。其它类似的反向代理技术或服务器,都可参考此demo。
三、更多代码示例
可以通过以下这些代码,简单快速接入。如需要更复杂的功能(如会话保持),请参考前面的PHP示例。
curl -X POST "http://engine.ltranslate.cn/site/html?api-key=xxxxxx" -H "Content-Type: text/html" -H "api-key: xxxxxx" -H "url: https://beauty-soft.net/about.html" -H "source-lang: zh-cn" -H "target-lang: en" -H "content-type: text/html"
import unirest from "unirest";
unirest('POST', 'http://engine.ltranslate.cn/site/html?api-key=xxxxxx')
.headers({ 'Content-Type': 'text/html' })
.headers({ 'api-key': 'xxxxxx' })
.headers({ 'url': 'https://beauty-soft.net/about.html' })
.headers({ 'source-lang': 'zh-cn' })
.headers({ 'target-lang': 'en' })
.headers({ 'content-type': 'text/html' })
.end(function (response) {
if (response.error) {
System.err.println('Error: ' + response.error);
} else {
System.out.println('Response: ' + response.body);
}
});
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func main() {
// 没有数据体的情况下
req, err := http.NewRequest("POST", "http://engine.ltranslate.cn//site/html?api-key=xxxxxx", nil)
req.Header.Set("Content-Type", "text/html")
req.Header.Set("api-key", "xxxxxx")
req.Header.Set("url", "https://beauty-soft.net/about.html")
req.Header.Set("source-lang", "zh-cn")
req.Header.Set("target-lang", "en")
req.Header.Set("content-type", "text/html")
if err != nil {
fmt.Println("Error:", err)
return
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Response:", string(body))
}
import http.client
conn = http.client.HTTPSConnection("engine.ltranslate.cn")
headers = {
"Content-Type": "text/html",
"api-key": "31243rafdsfdsafdarweqrewrdafdsafds",
"token": "4a10e24b-7f1b-49b6-a340-0e3f904c41ba",
"url": "https://beauty-soft.net/about.html",
"source-lang": "zh-cn",
"target-lang": "en",
"content-type": "text/html",
}
# 处理请求体
body = None
conn.request("POST", "//site/html?api-key=f8ed5ad4-0fa1-4af9-aa94-0d4f9da7a6d5", body, headers)
response = conn.getresponse()
print("Status:", response.status)
print("Response:", response.read().decode('utf-8'))
conn.close()
四、支持的语言
Ltranslate支持大多数国家和地区的语言,具体支持的语言列表,可查看【语言】