0

问题1:非root用户不能创建端口号为80的nginx应用?

Podman 无法创建绑定到端口 < 1024 的容器。

不允许非 priv 用户绑定到 < 1024 的端口,因此这需要 root。

所以只能在root下创建nginx?而且我还需要 PHP 和 mariadb 来支持我的网站,我尝试在 nginx 的配置文件中引用 PHP:

location ~ \.php(.*)$ {
    fastcgi_pass   php:9000;
    ...
}

检查nginx -t并报告错误: nginx: [emerg] host not found in upstream "php" in ...

但是 docker 就是这样工作的

我该怎么办?</p>

4

1 回答 1

1

以 root 权限运行的 docker 守护进程在系统级别管理网络。它创建额外的网络,其中 docker 容器有一个 IP 地址,并将主机连接到这些网络。

据我所知,无根 podman 进程也会创建这些网络,但无法将主机连接到这些内部 podman 网络,因为它没有足够的权限。

但是 rootless podman 可以将容器的端口映射到 > 1024 的端口,因为这不需要 root 权限。

我的解决方法:

  1. 我将在我的无根 podman 容器中运行的 Web 应用程序公开到一个高端口,例如 8090,只能从 127.0.0.1 访问(因此只有来自您的主机的流量可以到达那里)。
  2. 我设置了一个 NGINX 反向代理来 proxy_pass 从端口 443 到端口 8090 的传入流量。

这样,Web 应用程序可以在无根容器中运行,并且仍然可以在 80 或 443 等标准端口上访问。使用 nginx 作为反向代理,您甚至可以在中心点管理 Let's Encrypt 证书。

注意:在第 1 步中,您必须在 podman 命令中指定端口映射。类似的东西podman run -p 127.0.0.1:8090:80 image

为了完整起见,我的 nginx 配置看起来与此类似:

server {
        server_name example.org;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                proxy_pass http://127.0.0.1:8080/;
        }
}
于 2020-05-09T13:52:27.760 回答