我在单独的LXC容器中使用nginx作为所有虚拟机和LXC容器的反向代理。 当我尝试在我的网站上对自己进行身份validation时,例如,在单独的虚拟机中,例如phpmyadmin或Yunohost,当POST来自域时,nginx会返回来自本地IP的响应!
看: Nginx返回一个本地IP而不是域名
在这里我试图validationphpmyadmin。 当我有效时,我必须刷新页面才能成功连接。
这是我的nginxconfiguration:
server { listen 80; server_name mysql.mydomain.com; location / { proxy_pass http://10.0.2.103; } }
我的默认文件是:
server { listen 80 default_server; listen [::]:80 default_server; location / { try_files $uri $uri/ =404; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; fastcgi_param REMOTE_ADDR $http_x_real_ip; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; } # Pour let's encrypt location '/.well-known/acme-challenge' { default_type "text/plain"; root /root/certbot-auto/; } # On interdit tout autre appel location ~ /\. { deny all; access_log off; log_not_found off; } }
Apache在每个虚拟机上使用每个服务。
编辑:我正在使用CloudFlare进行SSLauthentication。 现在我用Nginx来encryption,还是一样的问题。
编辑2:我解决了phpmyadmin的问题,强迫自己使用绝对URL,在phpmyadmin的configuration文件:
$cfg['PmaAbsoluteUri'] = 'https://mysql.example.com/';
但是这个问题在我其他的LXC容器和虚拟机器中是相同的。
当我第一次尝试连接到URL agora.mydomain.com时,这是指向Yunohost,在一个QEMU,这是发生了什么事: 请求agora.mydomain.com成为本地IP
我的nginx VirtualHost非常简单:
server { listen 80; server_name agora.mydomain.com; location / { proxy_pass http://10.0.2.106; # return 301 https://agora.mydomain.com$request_uri; } }
当在Yunohost虚拟机的本地使用lynx localhost的时候,它是有效的,所以我认为这是一个nginx问题。
同样的问题,我的网站论坛,在另一个虚拟机,使用吼吼箱,但在这里只有当我尝试在login页面进行身份validation。
我认为问题是在proxy_pass指令中的地址。 使用适当的主机名称的IP地址或添加主机头
与定义的上游
upstream agora.mydomain.com { server 10.0.2.106; } server { listen 80; server_name agora.mydomain.com; location / { proxy_pass http://agora.mydomain.com; } }
或者只是主机头
server { listen 80; server_name agora.mydomain.com; location / { proxy_set_header Host $host; proxy_pass http://10.0.2.106; } }