我有一个在 nginx 1.15 后面反向代理的 Web 应用程序服务器,如下所示:
location / {
proxy_pass https://some.awesome.IP:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
add_header Content-Security-Policy "default-src 'self'; frame-ancestor https://subdomain.domain.org 'self'";
Run Code Online (Sandbox Code Playgroud)
现在这个 Web 应用程序服务器认为将标头设置Content-Security-Policy为frame-ancestors 'self'- 这会破坏我的前端,因为我需要将该页面包装在托管于 的 iframe 中https://subdomain.domain.org。
那么,在将响应传递给客户端之前,如何在 nginx 中更改/覆盖/删除从 Web 应用程序服务器返回的标头?add_header这里显然被忽略了。
我有 Apache 反向代理服务器,它将请求代理到我的内部 Apache 服务器。我在 Linux 平台上使用 Apache 2.4 版本。
每当后端 Apache 服务器花费超过 60 秒(PHP 页面等待后端 Apache 服务器上的 Mysql 查询结果)时,我就会遇到超时页面和 HTTP ERROR 504
Apache 默认超时设置为 300 秒。
仅当通过 apache 反向代理访问网站时才会出现此问题。使用内部 IP 效果很好。
我尝试将以下参数设置为 proxypass 但没有成功。
ProxyPass / http://internal-ip:8080/ retry=1 acquire=3000 timeout=600 Keepalive=On
Run Code Online (Sandbox Code Playgroud)
我还尝试在不存在的 IP 上进行 ProxyPass,60 秒后也显示 504 HTTP ERROR
请帮助我理解这个问题。
<VirtualHost *:80>
ServerName mywebsite.example.com
ServerAlias www.mywebsite.example.com
ProxyPreserveHost On
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/mywebsite.example.com-error.log
CustomLog ${APACHE_LOG_DIR}/mywebsite.example.com-access.log combined
RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
RewriteRule .* - [R=405,L]
ProxyPass /.static-pages !
ProxyPass / http://<Internal Apache …Run Code Online (Sandbox Code Playgroud) 客户端正在向我的 Nginx 反向代理发送自定义 HTTP 标头X-ABC-LOGIN-NAME。为了确保它确实到达,安装了 PHP 服务器 (fastcgi),并且此标头确实显示在phpinfo()“PHP 变量”部分中(带有值)。
我使用 Gunicorn 服务器操作 Django 后端,并在 Django 代码中将所有标头打印到控制台。当我为 /etc/nginx/sites-enabled/default 中的 分配静态值时X-ABC-LOGIN-NAME,该值到达后端。在 nginxdefault文件中,如下所示:
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# include snippets/self-signed.conf;
# include snippets/ssl-params.conf;
# server_name localhost;
server_name dev_server;
underscores_in_headers on;
location / {
proxy_pass http://localhost:8000;
proxy_pass_request_headers on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-ABC-LOGIN-NAME "static_name"; # <-- "static_name" arrives …Run Code Online (Sandbox Code Playgroud) 我在负载均衡器后面有一个 nginx 服务器,nginx 服务器将请求传递到各种服务,但在本例中是一个运行 apache 的 docker 容器。负载均衡器正确设置了 X-Forwarded-For,但当它到达 docker 容器时,X-Forwarded-For 已设置为 LB IP。
我在 nginx 配置中有这个:
/etc/nginx/conf.d/real_ip.conf
set_real_ip_from {{LB IP}};
real_ip_header X-Real-IP;
real_ip_recursive on;
Run Code Online (Sandbox Code Playgroud)
这是虚拟主机:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name *.domain domain;
include /etc/nginx/snippets/domain_ssl.conf;
add_header X-Nginx-Debug "hi";
proxy_pass_request_headers on;
location / {
proxy_pass_request_headers on;
proxy_pass http://container-php;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-Addr $remote_addr;
proxy_set_header X-Real-IP $http_x_real_ip;
proxy_set_header X-Header-Test "Hello World - $http_x_forwarded_for";
proxy_set_header X-Forwarded-Proto $scheme; …Run Code Online (Sandbox Code Playgroud) 我想将 80 和 443 上的所有流量从 foo.com 映射到内部服务器:192.168.1.101。我有一个 VirtualHost(Ubuntu 上的 Apache 2.2)设置如下(注意,我必须分解下面的超链接,因为我是一个“新用户”):
<VirtualHost *:80>
ServerName foo.com
ServerAlias *.foo.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://192.168.1.101/
ProxyPassReverse / http://192.168.1.101/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这对 http 流量很有用。但是,我似乎无法为 https 做同样的事情。我试过了:
将 VirtualHost *:80 更改为 * - 但这不起作用(我需要它 http->http 和 https->https)
为 *:443 创建一个新的 VirtualHost 条目,该条目重定向到 http://192.168.1.101/,但同样失败(浏览器超时)
我在这里和其他地方做了一些搜索,我能找到的最接近的问题是this,但这并没有完全回答它。
另外,出于好奇,我尝试将所有端口映射到 https(通过将两个 ProxyPass 行从 http 更改为 https(并从 VH 中删除 :80),但这也不起作用。你会怎么做呢? ?
有什么想法吗?提前致谢。
我有一个以 varnish+nginx 为前端的 Ruby on Rails 应用程序。由于除非您是登录用户,否则大多数站点内容都是静态的,因此我想在用户注销时使用清漆大量缓存站点,但仅在用户登录时缓存静态资产。
当用户登录时,他们的 Cookie: 标头中会出现 cookie 'user_credentials',此外我需要跳过缓存 /login 和 /sessions 以便用户可以首先获得他们的 'user_credentials' cookie .
默认情况下,Rails 不会设置缓存友好的 Cache-control 标头,但是当用户未登录时,我的应用程序会设置一个“public,s-max-age=60”标头。Nginx 设置为返回“远未来”过期标头对于所有静态资产。
我目前的配置在登录时完全绕过缓存,包括静态资产 - 并在注销时为所有内容返回缓存 MISS。我花了几个小时绕圈子,这是我目前的 default.vcl
director rails_director round-robin {
{
.backend = {
.host = "xxx.xxx.xxx.xxx";
.port = "http";
.probe = {
.url = "/lbcheck/lbuptest";
.timeout = 0.3 s;
.window = 8;
.threshold = 3;
}
}
}
}
sub vcl_recv {
if (req.url ~ "^/login") {
pipe;
}
if (req.url ~ "^/sessions") {
pipe;
} …Run Code Online (Sandbox Code Playgroud) 我有许多虚拟主机,它们的域名映射到单个 Apache 服务器(我们称之为 server1)。在某些情况下,某个虚拟主机的所有 URL 应该由不同的服务器提供服务(我们称之为 server2)。
实现这一目标的最简单方法是什么?我可以简单地将 server2 设置为使用与 server1 相同的基于名称的虚拟主机设置,然后依赖 server1 的 X-Forwarded-Host 标头(即 server2 会根据这些标头做正确的事情)吗?“基于同名的虚拟主机设置”是指“真实”域名(即映射到 server1 的 IP 的域名)。
我有几个后端(一个是 nginx+passenger)通过 ESI 组合。因为我不想没有 gzip/deflate 并且 SSL 清漆不能开箱即用。所以我想到了以下设置:
http://img693.imageshack.us/img693/38/esinginx.png
你怎么认为?矫枉过正?
我想在 RHEL 5 服务器上运行 Apache 和 Tomcat,Apache 处理 Ruby on Rails 应用程序(通过 mod_rails/Passenger)和 Tomcat 处理 Java 应用程序。
在 Apache 下,每个 Rails 应用程序都有一个 URL 和 vhost。这些 URL 已经在我们的 DNS 服务器中配置为指向机器。
在Tomcat,每个Java应用程序都有这样的网址:ourserver.ourcompany.com/app1,ourserver.ourcompany.com/app2,等。
服务器已经启动并运行,Tomcat 6 在端口 80 上运行并为多个 Java 应用程序提供服务。我想添加Apache并重新配置。我熟悉如何配置唯一的 Apache 服务器以使用 Passenger 托管 RoR 应用程序。我只是不知道如何让 Apache 和 Tomcat 像这样一起工作。
我通过谷歌搜索找到了各种资源和讨论(例如,这个),但它们往往有点粗略和不完整,或者它们似乎与我想要做的并不真正匹配。我链接到的那个似乎是为了将所有请求发送到 Tomcat,而不仅仅是某些请求并让 Apache 处理其他请求。
有人可以为server.xmland推荐一个示例配置httpd.conf,或者给我一些更详细的资源吗?
我有haproxy为我们工作。但是现在有两个 haproxy 进程正在运行。一个用于 HTTP,另一个用于 TCP (RTMP)。我试图在一个配置文件中配置两个代理,但 haproxy 只处理 HTTP。
我的配置文件:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#daemon
debug
user haproxy
group haproxy
maxconn 4096
defaults
log global
mode tcp
option tcplog
option dontlognull
option redispatch
retries 3
maxconn 2000
contimeout 10000
clitimeout 50000
srvtimeout 50000
listen http :80
mode tcp
balance roundrobin
server h1 xxx.xxx.xxx.xxx:80 check
server h2 xxx.xxx.xxx.xxx:80 check
listen rtmp :1935
mode tcp
balance roundrobin
server s1 xxx.xxx.xxx.xxx:1935 check
server s2 xxx.xxx.xxx.xxx:1935 check
Run Code Online (Sandbox Code Playgroud)
这对我不起作用。它仅在我将配置一分为二(一个 HTTP,一个 RTMP)并启动两个 …
reverse-proxy ×10
nginx ×4
apache-2.2 ×3
varnish ×2
ajp ×1
apache-2.4 ×1
cache ×1
django ×1
haproxy ×1
http-headers ×1
https ×1
timeout ×1
tomcat ×1
virtualhost ×1