我在思考这意味着如何认真地完成数周,但尚未得出结论。也许我想错了方向。
假设您有一百个网络应用程序来来去去。你想要一个像 gitlab 这样的 nginx 配置:
location / {
proxy_pass http://gitlab;
}
Run Code Online (Sandbox Code Playgroud)
由于 gitlab 是用 来创建的docker service create
,nginx 将能够通过它在你的入口网络中的 swarm-vip 假 dns 名称来解析 gitlab。
但是:仅当服务容器正在运行时。否则,nginx 将无法启动,因为 [emerg] 1#1: host not found in upstream "gitlab"
现在,当您必须运行高可用性 nginx 并且确保 proxy_pass 的应用程序正在运行不是您的业务时,这将是一个难题。
每次更新 nginx 服务时,如果其他一百个 swarm 服务中只有一个在同一秒内没有运行,它就不会出现……wtf?
如果这不起作用,为什么我们需要在 swarm 中进行名称解析?你怎么解决这个问题?
我考虑过 consul 和 nginx 虚拟主机模板的动态生成(甚至不要考虑 docker-nginx-proxy!),但是应用程序非常不同,您可以说每个应用程序都有自己的单独配置。而这一切工作不是为了特殊原因,只是为了解决nginx的解决问题?
有人试过在 CentOS7/httpd 上安装 mod_fastcgi 吗?
由于它不在 epel 或 fusion 存储库中,我尝试了 el6 rpm,它不起作用(httpd 说:无法将模块/mod_fastcgi.so 加载到服务器中:/etc/httpd/modules/mod_fastcgi.so:未定义符号:unixd_config )。
从源代码编译 mod_fastcgi (# make top_dir=/usr/lib64/httpd) 也失败了,出现了数千个这样的错误:
/usr/include/httpd/http_config.h:574:32: error: request for member 'connection' in something not a structure or union
mod_fastcgi.c:2881:5: warning: passing argument 6 of 'ap_log_rerror_' from incompatible pointer type [enabled by default]
ap_log_rerror(FCGI_LOG_ERR_NOERRNO, r, "FastCGI: access denied: %s", r->uri);
Run Code Online (Sandbox Code Playgroud)
SELINUX 已被禁用(以排除“拒绝访问”的原因)
我还安装了编译fastcgi的要求:httpd-devel libtool make gcc apr apr-devel。
由于 mod_fastcgi 恕我直言是连接到 PHP-FPM 的常用方法,我真的无法想象 fastcgi 不适用于 CentOS 7,所以我认为我做错了什么。
不幸的是,mod_proxy 对套接字连接的支持从 httpd 2.4.10 开始,而 CentOS 7 存储库只有 …