NGINX反向代理到docker应用程序
我目前正在学习设置nginx,但我已经遇到了一个问题。我的vps上运行着gitlab和nextcloud,它们都可以通过正确的端口访问。因此,我用一个简单的NGINX反向代理到docker应用程序,docker,nginx,reverse-proxy,devops,Docker,Nginx,Reverse Proxy,Devops,我目前正在学习设置nginx,但我已经遇到了一个问题。我的vps上运行着gitlab和nextcloud,它们都可以通过正确的端口访问。因此,我用一个简单的proxy\u pass命令创建了一个nginx配置,但我总是显示502坏网关。 Nextcloud、Gitlab和NGINX是docker容器,NGINX的端口80已打开。其余两个集装箱的港口3000和3100已打开 /etc/nginx/conf.d/gitlab.domain.com.conf /var/logs/error.log 我
proxy\u pass
命令创建了一个nginx配置,但我总是显示502坏网关
。
Nextcloud、Gitlab和NGINX是docker容器,NGINX的端口80已打开。其余两个集装箱的港口3000和3100已打开
/etc/nginx/conf.d/gitlab.domain.com.conf
/var/logs/error.log
我的配置有什么问题吗?我认为您可以使用比这更简单的配置方式 也许是这样的:
http {
...
server {
listen 80;
charset utf-8;
...
location / {
proxy_pass http://gitlab:3000;
}
}
}
$ docker ps (use this to get the container id)
我假设您使用docker的内部DNS访问容器,例如gitlab指向gitlab容器内部IP。如果是这种情况,那么您可以打开一个容器并尝试从另一个容器ping gitlab容器。
例如,您可以从nginx容器ping gitlab容器,如下所示:
http {
...
server {
listen 80;
charset utf-8;
...
location / {
proxy_pass http://gitlab:3000;
}
}
}
$ docker ps (use this to get the container id)
现在做:
$ docker exec -it <container_id_for_nginx_container> bash
# apt-get update -y
# apt-get install iputils-ping -y
# ping -c 2 gitlab
$docker exec-it bash
#apt获取更新-y
#apt get安装iputils ping-y
#ping-c2gitlab
如果不能ping,则表示容器之间的通信有问题。你在使用docker compose吗?如果你是的话,我建议你看看“links”关键字,它用来链接应该能够相互通信的容器。例如,您可能会将gitlab容器链接到postgresql
让我知道这是否有帮助 另一个利用Docker容器只是独立控制组中的进程这一优势的选项是将每个进程(容器)绑定到主机网络(而不是独立网络组)上的端口。这绕过了Docker路由,因此请注意主机上的端口可能不会重叠(与共享同一主机网络的任何正常进程没有区别) 您提到运行Nginx和Nextcloud(我假设您使用的是Nextcloud fpm映像,因为支持FastCGI)。在这种情况下,我必须在我的Arch Linux机器上执行以下操作:
/usr/share/webapps/nextcloud
绑定(绑定安装)到位于/var/www/html
的容器http
和容器www-data
都是UID=33)root/usr/share/webapps/nextcloud;
FastCGI\u参数script\u FILENAME/var/www/html$FastCGI\u script\u name;
。换句话说,您不能像通常那样使用$document\u root
,因为这指向主机的nextcloud根路径config.php
文件中调整数据库和Redis的路径,使其不使用localhost
,而使用主机的主机名。localhost
似乎引用了容器的主机,尽管已绑定到主机的主网络是的,它终于开始工作了。我忘了在我的nginx配置中按名称或容器id引用容器。谢谢!!:)