我正在尝试在基于 docker 的云上运行 wordpress。设置是:

有一个运行 mysql 数组的服务器,它为在 Nginx 上运行的 Wordpress 容器提供服务。设置是从此dockerfile复制的。此设置的目标是实现高吞吐量并与我们的云设置兼容。
wordpress 容器有一个本地 ip,在与 mysql 数组和 Nginx 反向代理相同的子网中,以及一个运行 http(不是 https)的公共端口。
反向代理配置为为 wordpress 容器运行 SSL。导航适用于 http 和 https,但是当我尝试使用 HTTPS 登录仪表板时,出现此错误:
您没有足够的权限访问此页面。
我发现的唯一有意义的错误发生在我通过 HTTP 登录仪表板时:
[04-Nov-2014 23:16:13 UTC] PHP 通知:未定义索引:HTTP_X_FORWARDED_PROTO in /usr/share/nginx/www/wp-config.php on line 86
但仪表板在 http 上正常工作。
在 Wordpress 配置文件中,我必须添加以下行:
/* SSL代理*/
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';
我认为这是罪魁祸首。我在wordpress 官方文档中找到了这个技巧,没有它 HTTPS 不会加载 CSS,无论是记录还是未记录。我想也许我应该修改这条线以适应我的配置?
无论是这个,还是 nginx 反向代理配置文件,我都不知道。
wordpress + nginx容器中的nginx配置文件比较标准,从这里复制过来的。
请帮帮我:D
我们使用 nginx 进行负载平衡,我们需要 ip_hash 来保证我们的服务器正常工作。
当我们开始使用 cloudflare 时,我们的大多数请求都针对一台服务器,因为似乎所有请求都仅由 cloudflare 的 IP 标识。我们想更好地平衡它,最好 ip_hash 使用 cloudflare 放在请求上的标头 CF-Connecting-IP。
任何人都知道如何做到这一点?
upstream backend {
ip_hash;
#proxy_next_upstream_timeout 30;
server localhost:8080 max_fails=2 fail_timeout=180;
server somethign:8080 ;
server something2:8080;
}
Run Code Online (Sandbox Code Playgroud) 我有一个面向 Internet 的服务,它通过 https 提供 API - json、xml 等 - 类似于https://api.example.org/api/foo。API 通常是从公司内部服务构建的,但即使我们向基于外部 Internet 的服务发出请求,我也希望它们向客户显示为我的服务。
从用户代理的角度来看,https://api.example.org是源服务器。
我们购买了一个花哨的供应商 API 网关产品来保护 API。到现在为止还挺好。
目前,网关将 Via 标头附加到包含处理请求的服务器的内部主机名的请求中,这不太好。
> GET /api/foo/bar HTTP/1.1
> User-Agent: curl/7.37.1
> Host: api.example.org
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Thu, 15 Mar 2015 22:11:46 GMT
< Max-Forwards: 20
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Via: 1.0 myinternalhostname.local (Apache-Coyote/1.1)
< transfer-encoding: chunked
< Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
无论他们是否可以使用它,我都不希望机器人和坏人知道我的主机名。
我可以删除 …
基本上我有一个 API 农场
192.168.1.1、192.168.1.2、192.168.1.3
但是,端点具有不同的文件夹结构(我无法修改的第 3 方!)
所以基本上我想要一个像这样的 nginx 配置
upsteam api_servers{
server 192.168.1.1/api/;
server 192.168.1.2/myApp/api/;
server 192.168.1.3/;
}
server{
listen 80;
location / {
proxy_pass http://api_servers;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您不能在上游服务器中拥有路径。我想我必须重写这些?我知道如何为传入的请求重写它,但不确定当它到达每个后端服务器时如何以不同的方式重写它。
提前谢谢了!!
我正在尝试在 nginx 后面运行 Jenkins。Jenkins 在 Docker 容器中运行,从目录 /jenkins 侦听端口 8080。我的 nginx 容器将此 Jenkins 容器链接为主机名“jenkins”,因此在其上下文中,可以通过http://jenkins:8080/jenkins访问 Jenkins 。
我按照从使用 TLS 加密的文件夹运行 Jenkins 中的步骤进行操作,因此我site-config包含以下内容:
location ^~ /jenkins/ {
sendfile off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://jenkins:8080/jenkins/;
proxy_redirect http:// https://;
proxy_max_temp_file_size 0;
client_max_body_size 64m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
Run Code Online (Sandbox Code Playgroud)
我现在试图从本地主机访问 nginx,并调用https://localhost/jenkins向我展示 Jenkins。但是,当我转到“管理 Jenkins”时,收到消息说我的反向代理设置不正确。我试过
curl -k -iL …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 nginx 为节点应用程序提供服务,但首先尝试为可能位于/public文件夹中的静态文件提供服务。我有那么多工作——但是在访问domain.tld/静态文件夹或索引时,我得到 403;directory index of "/var/www/domain.tld/" is forbidden. 所有权限似乎都正确,所以我很困惑。
这是我的服务器块;
server {
server_name domain.tld;
location / {
root /var/www/domain.tld/public;
try_files $uri $uri/ @proxy;
access_log off;
}
location @proxy {
proxy_pass http://127.0.0.1:3000;
}
}
Run Code Online (Sandbox Code Playgroud)
访问任何随机页面(包括假定的子目录)正确代理节点应用程序。但是,对于任何现有静态目录的根 / 和根,则为 403。
有任何想法吗?
我正在对常用 Web 服务器之间的差异进行个人研究。当涉及到特定功能时,我正在努力寻找明确的答案,对我来说最重要的是:即时重写响应正文的能力。
场景:web服务器(apache、nginx、iis、varnish、haproxy)部署为反向代理或应用服务器代理(nginx-->passenger为例)。
问题:在哪些网络服务器中以及如何重写响应正文。关于此类操作的简便性和性能的评论或 2 也会有所帮助。
我的研究:
Content rewritting:
Nginx: ngx_http_sub_module
Nginx: LUA body_filter: https://groups.google.com/forum/embed/#!topic/openresty-en/Gj-s_hARc84
Apache: mod_substitute
Apache: starting from 2.3 LUA can be used as a scripting language (and the response body rewriting with it is possible)
IIS: does not seem top be possible?
Varnish: possible, but hacky: https://github.com/aivarsk/libvmod-rewrite
HAproxy: not possible, although it might be possible with LUA in the future
Run Code Online (Sandbox Code Playgroud)
还有什么我忘记了吗?谢谢。
我们在 nginx 上有一个用于竹服务器的反向代理服务器,但它提供了一个 502 错误的网关,但可以从反向代理服务器(两个 Centos)访问。
nginx.conf:
server {
listen 80;
server_name bamboo.test.foo.com;
access_log /var/log/nginx/bamboo.test.foo.access.log main;
location /bamboo {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.10.5:8085;
client_max_body_size 10M;
}
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
Run Code Online (Sandbox Code Playgroud)
访问日志:
81.82.215.59 - - [07/Dec/2016:16:19:39 +0000] "GET / HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36" "-"
81.82.215.59 - - [07/Dec/2016:16:19:39 +0000] "GET /favicon.ico HTTP/1.1" 502 575 "http://bamboo.test.foo.com/" "Mozilla/5.0 (Windows …Run Code Online (Sandbox Code Playgroud) 我在本地网络的不同服务器上运行几个网站。所有网站都通过一台添加了 HTTPS 并监控流量的服务器进行代理。
目前,如果有人做:
curl -I subdomain.domain.tld
Run Code Online (Sandbox Code Playgroud)
结果是:
curl -I https://subdomain.domain.tld
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2017 09:19:02 GMT
Server: Jetty(8.y.z-SNAPSHOT)
Content-Type: text/html
Content-Length: 2379
Last-Modified: Tue, 10 Jan 2017 11:15:29 GMT
Run Code Online (Sandbox Code Playgroud)
如何使用 ReverseProxy 的另一个响应“覆盖”代理背后的服务器提供的响应?
例如,我希望我的输出看起来像这样(如果可能)
curl -I https://dubdomain.domain.tld
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2017 09:19:02 GMT
Server: Apache24 (or even something else)
Content-Type: text/html
Content-Length: 2379
Last-Modified: Tue, 10 Jan 2017 11:15:29 GMT
Run Code Online (Sandbox Code Playgroud)
这是可以实现的吗?
我在 Ubuntu 14.04 LTS 上运行 Apache 2.4.7 作为反向代理。这个 Apache 服务器充当许多不同后端应用程序的入口点,这些应用程序通过<Location>块中不同的 mod_proxy 配置进行访问
我需要提供对使用 WebSocket 的应用程序的反向代理访问。该应用程序是一个 Java Spring 应用程序,它通过 HTTP 提供 HTML 和其他静态文件,然后在页面加载后使用 WebSocket 获取动态数据。
我已经Nginx使用以下配置运行了应用程序:
location /newapp/ {
proxy_pass http://newapp.example.com:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于需要一个在 Nginx 上不可用的 Apache 身份验证模块,我无法在生产中使用它。
我想要做的是,在伪 Apache-config 中:
<Location /newapp/>
if not WebSockets:
ProxyPass http://newapp.example.com:8080/
ProxyPassReverse /
else
ProxyPass ws://newapp.example.com:8080/
ProxyPassReverse /
</Location>
Run Code Online (Sandbox Code Playgroud)
Apachemod_proxy_wstunnel模块让我觉得这应该是可能的。WebSocket 是在 URL 上访问的/api/socket/...,因此我尝试将ProxyPass使用单独<Location>块的两种类型分开:
<Location /newapp/> …Run Code Online (Sandbox Code Playgroud) reverse-proxy ×10
nginx ×7
apache-2.4 ×2
ssl ×2
apache-2.2 ×1
centos ×1
cloudflare ×1
curl ×1
docker ×1
http ×1
http-headers ×1
iis ×1
jenkins ×1
mod-proxy ×1
proxy ×1
static-files ×1
varnish ×1
websocket ×1
wordpress ×1