我正在尝试proxy_pass到通过Amazon ECS实例在Docker容器中设置的http Wordpress网站。客户端通过我们已设置的测试服务器(https://test.xxxxxxx.com)到达站点。当用户转到https://test.xxxxxxx.com时,我希望它在地址栏中显示https://test.xxxxxxx.com,但调出我的Wordpress网站的页面(端口80上的http://xx.xxx.xxx.xxx)。
我可以将其转到我的Wordpress网站,但看起来很有趣。我收到很多混合内容错误,因为我试图通过https请求访问http文件。我了解发生了什么,但是即使尝试了所有可以在网上找到的建议,我也似乎无法解决。
我尝试更改站点可用文件夹中的Nginx文件中的几个设置,以及更改Wordpress网站上wp-config.php中的设置。以下是我尝试过的一件事。我发现的几乎所有教程以及我尝试过的所有内容都是这种形式的变体。
#Nginx file
server {
listen 443;
location / {
proxy_pass http://xx.xxx.xxx.xxx:80;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
#wp-config.php
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
$_SERVER['HTTPS'] = '1';
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER[HTTP_HOST'] = $_SERVER[HTTP_X_FORWARDED_HOST'];
}
define( 'WP_HOME', 'http://xx.xxx.xxx.xxx');
define( 'WP_SITEURL', 'http://xx.xxx.xxx.xxx');
我想发生的是,当用户在地址栏中输入https://test.xxxxxxx.com时,我的Wordpress网站加载了正确的主题和所有图像,但是https://test.xxxxxxx.com仍显示在地址栏中
答案 0 :(得分:0)
我建议您在ECS中使用HA-Proxy反向代理。 我尝试了nginx反向代理,但失败了。 HA-Proxy并获得成功。 它比nginx配置更简单。
首先,使用Docker的“链接”选项并设置“环境变量”(例如LINK_APP,LINK_PORT)。
第二,将此“环境变量”填充到haproxy.cfg中。
此外,我建议您使用“动态端口映射”到ALB。它使作品更加灵活。
taskdef.json:
# taskdef.json
{
"executionRoleArn": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<APP_NAME>_ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "<APP_NAME>-rp",
"image": "gnokoheat/ecs-reverse-proxy:latest",
"essential": true,
"memoryReservation": <MEMORY_RESV>,
"portMappings": [
{
"hostPort": 0,
"containerPort": 80,
"protocol": "tcp"
}
],
"links": [
"<APP_NAME>"
],
"environment": [
{
"name": "LINK_PORT",
"value": "<SERVICE_PORT>"
},
{
"name": "LINK_APP",
"value": "<APP_NAME>"
}
]
},
{
"name": "<APP_NAME>",
"image": "<IMAGE_NAME>",
"essential": true,
"memoryReservation": <MEMORY_RESV>,
"portMappings": [
{
"protocol": "tcp",
"containerPort": <SERVICE_PORT>
}
],
"environment": [
{
"name": "PORT",
"value": "<SERVICE_PORT>"
},
{
"name": "APP_NAME",
"value": "<APP_NAME>"
}
]
}
],
"requiresCompatibilities": [
"EC2"
],
"networkMode": "bridge",
"family": "<APP_NAME>"
}
haproxy.cfg:
# haproxy.cfg
global
daemon
pidfile /var/run/haproxy.pid
defaults
log global
mode http
retries 3
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http
bind *:80
http-request set-header X-Forwarded-Host %[req.hdr(Host)]
compression algo gzip
compression type text/css text/javascript text/plain application/json application/xml
default_backend app
backend app
server static "${LINK_APP}":"${LINK_PORT}"
Dockerfile(haproxy):
FROM haproxy:1.7
USER root
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
请参阅:
Github:https://github.com/gnokoheat/ecs-reverse-proxy
Docker镜像:gnokoheat / ecs-reverse-proxy:latest