我目前正在尝试使用反向/转发代理将授权标头传递给目标服务器。我该怎么做呢?我已经查看了以下来源,其中一条评论指出这仅适用于 Proxy-Auth 标头。但是,代理没有身份验证后端。它看起来像下面
用户 -> 代理(无 Auth Req) -> 后端(HTTP AUTH HERE)
我们的团队开发了一个分析应用程序,可以记录和分析所有传入(未丢弃)的请求。在这种情况下,我必须将所有请求的副本发送到我的反向代理解决方案中的另一个上游。
单独使用NGINX可以吗?或者有没有其他对当前反向代理结构影响最小的解决方案?
最好在 NGINX 中执行此操作,以便 NGINX 的请求处理已经完成,并且请求将与发送到目标上游的请求相同。
PS:分析应用没有返回任何响应
我将 nginx 设置为 docker 容器中的反向代理,以链接到容器外的站点。我有一个 vhost 配置设置如下(我尝试在家庭助理的位置之前添加 ^~ ):
server { # simple reverse-proxy
listen 80;
location / {
proxy_pass http://192.168.1.99:6789;
}
location ^~ /home-assistant {
proxy_pass http://192.168.1.99:8123/;
}
location /calibre-web/ {
proxy_pass http://192.168.1.99:8181/;
}
}
Run Code Online (Sandbox Code Playgroud)
对于 home-assistant 和 calibre-web 站点,页面都会加载,但我收到所有其他项目(图像、CSS 等)的 404 错误。 如果我尝试单击应用程序中的链接,它会将我链接到 192.168.1.99/file 而不是 192.168.1.99/site-folder/file。下面是日志中的一些记录(注意一个 200 响应和其他 404 响应)。我在这里做错了什么?在此先感谢您的帮助。
192.168.1.6 - randy [15/Aug/2016:03:15:42 +0000] "GET /frontend/panels/dev-template-0a099d4589636ed3038a3e9f020468a7.html HTTP/1.1" 404 199 "http://192.168.1.99/home-assistant/" "Mozilla/5.0 (X11; CrOS x86_64 8350.60.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.85 Safari/537.36"
192.168.1.6 - randy [15/Aug/2016:03:15:42 +0000] …Run Code Online (Sandbox Code Playgroud) 我在 Amazon AWS 上部署了以下架构。
目标是在https://app.acmecorp.com公开充当入口点的 Web 应用程序(单页应用程序)。这是一个单页应用程序:
这个想法是将后端部署在弹性容器服务集群中(通过 docker)。然后将它们生成/自动扩展到由负载均衡器提供服务的目标组中。后端通过https://backend.acmecorp.com公开。(指向 AWS 负载均衡器的 DNS CNAME)
单页应用程序部署在 Amazon S3 存储桶中,并通过 S3 静态站点托管公开。(http://frontend.s3-website-us-west-2.amazonaws.com)。这也可以通过http://frontend.acmecorp.com上的 DNS CNAME 公开
我想要的是以下内容。用户通过https://app.acmecorp.com访问应用程序。这应该为静态内容提供服务。为避免 CORS 设置,我希望单页应用程序能够从该域调用 API 调用到/api,因此对https://app.acmecorp.com/api/ ** 的调用应映射到后端。
显然这可以用 Nginx 之类的东西来完成,但我想知道亚马逊是否为此提供了一些东西,以及需要什么样的构建块才能拥有此功能
为了隐藏我的网站 IP,我在另一个 VPS 上用 nginx 代理了主服务器。我正在尝试将访问者的真实 IP 发送到我的网站,这是我在 conf.d 文件夹中的配置:
proxy_cache_path /etc/nginx/cacheddata levels=1:2 keys_zone=staticfilecache:180m max_size=500m;
proxy_temp_path /etc/nginx/cacheddata/temp;
proxy_connect_timeout 30;
proxy_read_timeout 120;
proxy_send_timeout 120;
#IMPORTANT - this sets the basic cache key that's used in the static file cache.
proxy_cache_key "$scheme://$host$request_uri";
upstream wordpressapache {
#The upstream apache server. You can have many of these and weight them accordingly,
#allowing nginx to function as a caching load balancer
server 127.0.0.1:8080 weight=1 fail_timeout=120s;
}
server {
listen 80;
server_name XXXXXX.com;
access_log off;
error_log …Run Code Online (Sandbox Code Playgroud) 我们正在尝试使我们的网站更加以内容为导向,虽然 Shopify 是一个很酷的电子商务平台,但在内容方面并不是那么好。因此,我们已将我们的网站从 Shopify 上移走,并将 WordPress 放在 Nginx 服务器上。在该服务器上,我们在这篇文章之后将商店反向代理到网站上的 /store 中。
我配置后一切都很好,但是由于当天的流量增加,我们一直面临以下禁令消息:
我的猜测是 Shopify 不会查看来自客户端的转发 IP,因此服务器因所有流量而被禁止。最终,这可能不是我们正在寻找的解决方法,我们可能需要完全离开 Shopify。由于这个原因,我们的商店基本上已经关闭了一整天。
任何人都可以确认这种方法不起作用吗?或者,如果这只是我的配置错误。
这是我在 nginx 配置文件中的位置:
location ~^/store/(collections|cart|products|shopify|pages|blogs|checkout|admin)/?/
{
rewrite /store/(.*) /$1 break;
proxy_pass https://xxxx.myshopify.com;
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_redirect off;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
}
Run Code Online (Sandbox Code Playgroud)
我非常感谢任何帮助。让我知道是否还有其他我可以提供的东西来使这个问题更容易回答。
谢谢!
在尝试让 Let's Encrypt Certbot 在托管反向代理内容的本地服务器上工作时,我无法让本地异常在Location块内工作。httpd.conf片段:
SSLProxyEngine on
<Location "/">
ProxyPass "https://internal.host/"
ProxyPassReverse "https://internal.host/"
</Location>
Include /etc/apache2/vhosts.d/01_acme.include
Run Code Online (Sandbox Code Playgroud)
将01_acme.include文件放在Location块的上方或下方没有任何影响。
该01_acme.include文件:
<Location /.well-known/acme-challenge/>
ProxyPass "!"
Alias /run/acme/.well-known/acme-challenge
</Location>
Run Code Online (Sandbox Code Playgroud)
我在该目录中放置了一个名为date. 尝试检索此文件会导致无休止的 301 重定向,date/index.html/index.html/...直到达到客户端的重定向限制。日志显示这是在前端服务器上生成的,后端从未收到请求。
如果我用独立指令替换 Location 块,它会按预期运行:
Alias /.well-known/acme-challenge /run/acme/.well-known/acme-challenge
ProxyPass /.well-known/acme-challenge !
Run Code Online (Sandbox Code Playgroud)
根据ProxyPass文档,这种定义异常的方法应该有效 - 它非常符合该部分末尾提供的示例配置。这只是坏了,还是我错过了什么?
重定向可能是根本原因,但我在此范围内找不到任何可能引发 301 的重定向或重写指令,并且在.htaccess(没有)或配置文件中唯一提到的 index.html是目录索引,我已经尝试过明确禁用但Options -Indexes没有效果。
我有一个大致如下所示的设置(我试图尽可能地简化它):
端口 443 - nginx 侦听并转发到端口 80,配置看起来像这样
server {
listen 443 ssl;
location / {
proxy_pass http://127.0.0.1:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
Run Code Online (Sandbox Code Playgroud)
端口 80 - Varnish(反向代理)将流量转发到端口 8080,除非缓存命中。
使用 fastcgi 为 PHP 设置端口 8080 nginx。我有一些常见的配置:
location ~ \.php$ {
...
include fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)
和 fastcgi_params 文件,看起来像这样
...
fastcgi_param HTTPS $https if_not_empty;
Run Code Online (Sandbox Code Playgroud)
我一直在尝试做的是创建一个设置,其中 nginx 在侦听端口 8080 时能够检测到它是否正在向 http 或 https 提供内容。它需要将此告诉 PHP,以便它可以使用正确的方案创建 URL。
我在想我应该在某个地方监听X-Forwarded-Proto然后告诉 nginx https 已打开。我不知道如何/在哪里做某种 if 语句,或者这样的事情是否可能,或者如何告诉 …
在现有的 nginx 反向代理上,我需要将客户端 IP 传递给服务器(从 nginx 到 NG-Engine 中服务的前端,然后从这个到后端),我尝试了很多站点,但服务器只是接收127.0.0.1。额外信息(在 Michael Hampton 问题之后添加),我们的虚拟机基础架构:
我检查了文档,在这里尝试过(包括删除 X-Real-IP 标头,正如他们在另一个问题中所建议的那样)。我还尝试添加:
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For
Run Code Online (Sandbox Code Playgroud)
我的 nginx 有 real_ip 模块(下面 nginx -V 的输出),这是我的 nginx.conf ......我做错了什么?
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# …Run Code Online (Sandbox Code Playgroud) 我们今天在 AWS 环境中遇到了 nginx 解析器的问题。根据 nginx 日志文件,在 DNS 记录更改后,nginx 没有解析到正确的服务器。
DNS最初解析:
webservers.ourservers.local A 10.0.0.5
webservers.ourservers.local A 10.0.1.8
Run Code Online (Sandbox Code Playgroud)
...但是一旦这些 IP 地址之一发生更改,nginx 就没有得到更改 - 并不断尝试访问过时的 IP 地址 - 远长于 60 秒 ttl。
根据 nginx.org/en/docs/http/ngx_http_core_module.html#resolver,nginx 解析器仅缓存 ttl 的答案 - 或者,在我们的例子中,为配置的时间。
我的同事将resolver线路从位置块移动到服务器块,但它没有帮助。我们需要重新启动 nginx 以强制它解析到新的 ip。
nginx配置:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$scheme - $http_x_client_ip - $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
server {
listen 8080 default;
set $OUR_ROOT …Run Code Online (Sandbox Code Playgroud) domain-name-system nginx reverse-proxy load-balancing amazon-web-services
reverse-proxy ×10
nginx ×7
amazon-s3 ×1
apache-2.2 ×1
apache-2.4 ×1
cors ×1
docker ×1
http-headers ×1
redirect ×1
ssl ×1