我尝试重定向到代理服务器nginx。
location /phpmyadmin {
proxy_http_version 1.1;
proxy_pass https://${PMA}:5000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
但我得到错误:
nginx: [emerg] invalid number of arguments in "proxy_set_header" directive in /etc/nginx/nginx.conf:26
在这个清单中检查错误的完整代码,因为我是真实的找不到一些错误的(${env} = correctry在脚本中更改
user root;
worker_processes auto;
pcre_jit on;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
keepalive_timeout 3000;
sendfile on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/nginx.crt;
ssl_certificate_key /etc/ssl/nginx.key;
root /home;
index default.html /default.html;
location /phpmyadmin {
proxy_http_version 1.1;
proxy_pass https://${PMA}:5000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
location /wordpress {
return 307 http://${WP}:5050/;
}
location / {
try_files /default.html default.html default.htm;
}
}
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
}
daemon off;
需要多少simvols后)
2条答案
按热度按时间ljsrvy3e1#
我使用envsubst进行环境替换,这个实用程序尝试了swap $host和其他nginx env,解决了:
所以我专门设置了我想要替换的变量,避免了对nginx变量的一般替换,比如$host,$remote_addr等。如果你不指定你想要替换的变量,nginx变量将被替换为空值。
7lrncoxx2#
扩展@mikhail-prigorodov的工作答案:
OP描述的情况出现在使用Nginx Docker容器和Docker Compose时。在documentation中,它写道:
Nginx开箱即用,不支持大多数配置块中的环境变量。但是这个镜像有一个函数,它会在nginx启动之前提取环境变量。
所以,如果你在
docker-compose.yml
中使用环境变量作为12-Factor App设计的一部分,你必须弄清楚如何将它们正确地放入Nginx配置文件。Nginx Docker文档中的解决方案是在模板配置文件上运行
envsubst
,并将输出发送到Nginx配置文件。在this GitHub issue中提到的Dockerfile语法是:但是,如果您在配置模板中使用Nginx定义的变量AND环境变量占位符,则该解决方案会遇到问题。在我构建Nginx容器的目录(我的Dockerfile所在的目录)中,我有一个
templates
目录,其中包含一个名为default.conf.template
的文件,如文档中所示。该文件包含Nginx变量和环境变量。举例来说:问题(我认为)是
envsubst
正在寻找标记环境变量开始的“$”字符。在任何情况下,你会发现在成功运行envsubst
之后,当你尝试启动Nginx时,新Nginx配置文件中的每一行都有一个Nginx定义的变量(前导“$”)。要解决这个问题,请使用@mikhail-prigorodov提供的语法。应用到我的例子:
这是在经历了几个小时的挫折后对我起作用的解决方案。