标签: reverse-proxy

哪些 ssl 证书位于反向代理上的哪个位置?- nginx

需要澄清 nginx 反向代理服务器上的上游 SSL

我一直在阅读有关反向代理保护与上游服务器的 ssl 连接的nginx 文档,但我仍然对哪些 ssl 证书去哪里感到困惑。我发现的许多示例都有 nginx 代理本地主机,但我的情况是端点位于不同的服务器、端口和物理位置。

我想在 nginx 服务器上解析多个域。每个域在其当前服务器上都有一个用于其实际域名的 ssl 证书。

现在,我的每台服务器都在其自己的网络位置和物理位置上运行,但我希望有一个点来管理这些端点。

我的最终结果应该是这样的

                             client
                               |
                             nginx
                       https://example1.com
                       https://example2.com 
                       https://example3.com
                             x.x.x.x
                               |
               -----------------------------------------
               |                |                      |
https://example1.com    https://example2.com    https://example3.com
   a.b.c.d:1234             e.f.g.h:5678            i.j.k.l:9012
Run Code Online (Sandbox Code Playgroud)

现在https://example1.com解析为 abcd:1234,它安装了自己的 ssl 证书。因为我需要向客户端表示 nginx 服务器正在为域 example1.com 提供服务,所以我认为我需要将 example1.com ssl 移至前端运行的 nginx 服务器,对吧?如果我这样做,我应该在 abcd:1234 上使用什么 ssl 证书来维护安全的上游连接?

nginx 文档说 client.crt 和 server.crt,但 CA 使用域来注册它们。反向代理情况下的客户端和服务器是什么?对我来说,客户端是发出请求的浏览器。

哪些 ssl 证书位于反向代理上的哪个位置?

编辑:

我已经知道,只需将基于 url 的证书放在代理服务器上,您就可以看起来拥有安全连接。我希望知道的是要在后端服务器上放置哪些 ssl 证书。只是重复使用各自的证书吗?example1.com.crt代理服务器和后端服务器都可以吗?

ssl nginx reverse-proxy ssl-certificate

8
推荐指数
1
解决办法
2万
查看次数

如何使用nginx根据请求的域名代理服务器?

有一种情况,首先所有当前请求都应该像它们当前针对某个域名一样工作。例如 www.hello.com

动态DNS是要指向www.hello.com服务器相同的静态IP(somedomain.dnsdynamic.com ---> XXX.XXX.XXX.XXX)

所有请求,包括 GET、POST 等,都将被代理主机名为 finalserver.example.com 的另一台服务器。(注意这个服务器没有静态ip,所以必须使用主机名)

代理应该在 www.hello.com 服务器收到服务器名称为 somedomain.dnsdynamic.com 的请求时工作

已经尝试记住这个答案但失败了,要么得到 502 bad gateway 要么 404 page not found

nginx reverse-proxy

7
推荐指数
1
解决办法
3万
查看次数

如何在其他 nginx 服务器面前使 nginx 反向代理缓存无效?

我在单个 IP 地址上运行 Proxmox 服务器,它将根据请求的主机向容器发送 HTTP 请求。

我在 Proxmox 端使用 nginx 来监听 HTTP 请求,我proxy_pass在不同server块中使用指令根据server_name.

我的容器在 Ubuntu 上运行,同时也在运行一个 nginx 实例。

我在完全静态的特定网站上缓存时遇到问题:在文件更新后,nginx 继续为我提供陈旧的内容,直到我:

  • 清除 /var/cache/nginx/ 并重启 nginx
  • proxy_cache off为此服务器设置并重新加载配置

这是我的配置的详细信息:

在服务器上(proxmox):

/etc/nginx/nginx.conf

user www-data;
worker_processes 8;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
    use epoll;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    #tcp_nopush on;
    tcp_nodelay on;
    #keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off; …
Run Code Online (Sandbox Code Playgroud)

nginx cache reverse-proxy

7
推荐指数
1
解决办法
1万
查看次数

Apache 2.4 外部代理,内部重定向

我正在尝试设置一个反向代理,以只允许几个选定的 ip 范围代理到内部主机,而我希望不在 ip 范围内的任何其他人重定向到我们的内部命名主机。在此设置中,网络服务将正常工作,而没有通过 VPN 连接到我们网络的任何人都无法导航到内部资源。我一直试图让它在没有运气的情况下工作,我的部分配置目前如下:

       ProxyRequests Off
    <Proxy *>
            Allow from all
    </Proxy>
    <Location />
            Allow From xxx.xxx.xxx.xxx/24 1xxx.xxx.xxx.xxx/23
            Deny From All
            ProxyPass http://server.local.corp:8000/
            ProxyPassReverse http://server.local.corp:8000/
    </Location>
Run Code Online (Sandbox Code Playgroud)

此配置似乎可以很好地阻止其他 ip 范围进行代理,但是我不清楚如何为其他人添加重定向语句。

编辑 从第一个答案中获取建议我的代码现在看起来像:

<If "%{REMOTE_ADDR} -ipmatch 'xxx.xxx.xxx.xxx/24'">
  ProxyPass / http://server.local.corp:8000/
  ProxyPassReverse / http://server.local.corp:8000/
</If>
Run Code Online (Sandbox Code Playgroud)

并且 apache 在重启时抛出以下错误:

ProxyPass cannot occur within <If> section
Action 'configtest' failed.
The Apache error log may have more information.
Run Code Online (Sandbox Code Playgroud)

proxy reverse-proxy apache-2.4

7
推荐指数
1
解决办法
5420
查看次数

通过 nginx 获取分块请求

首先是一些背景:我们有一个嵌入式设备,可以将许多小事件上传到 Web 服务器。分块编码用于发布此信息。每个事件都作为一个单独的块发送,因此网络服务器 (node.js) 可以立即对事件做出反应。所有这一切都像一种魅力。

禁用服务器并在服务器上运行 netcat 显示设备发送的内容:

sudo nc -l 8080
POST /embedded_endpoint/ HTTP/1.1
Host: url.com
User-Agent: spot/33-dirty
Transfer-Encoding: chunked
Accept: text/x-events
Content-Type: text/x-events
Cache-Control: no-cache

120
{"some","json message"}
232
{"other","json event"}
232
{"and a lot more","up to 150 messages per second!"}
0
Run Code Online (Sandbox Code Playgroud)

现在我在我的网络服务器上安装了 nginx(版本 1.6.0)。最后我希望它处理 SSL 并且我想处理加速正常的网络流量。

如果我现在使用此服务器配置启用 nginx:

server {
  listen 8080;

  location / {
    proxy_http_version 1.1;
    expires off;
    proxy_buffering off;
    chunked_transfer_encoding on;
    proxy_pass http://localhost:5000;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我收到这个:

sudo nc -l 8080
POST /embedded_endpoint/ HTTP/1.1
Host: localhost:5000 …
Run Code Online (Sandbox Code Playgroud)

http nginx reverse-proxy request chunked

7
推荐指数
1
解决办法
2万
查看次数

反向代理背后的 Wordpress

我们的组织正在改造它的网站。有人在新服务器上建立了新站点。将条目放入 /etc/hosts 后即可访问它。并且以这种方式访问​​时可以完美运行。

但是由于涉及的大多数人都不擅长计算机,因此我决定设置反向代理。

我无权访问该站点,也无权托管它的服务器。我在那里安装了 Wordpress 的编辑器帐户。

我在我的私人服务器的 /etc/hosts 中放置了一个条目并使用以下配置设置反向代理,我的服务器在 Debian stable 下运行 apache-2.2:

<VirtualHost *:80>
    ServerName xxx.xxx.xxx.xxx
    ProxyRequests off
    ProxyPass /some/prefix/ http://site.example.com/
    ProxyPassReverse /some/prefix/ http://site.example.com/
    ProxyHTMLURLMap http://site.example.com/ http://xxx.xxx.xxx.xxx/some/prefix/
    <Location /some/prefix/>
            SetOutputFilter INFLATE;proxy-html;DEFLATE
            ProxyHTMLURLMap  http://site.example.com/ /some/prefix/
    </Location>
    ProxyPassReverseCookieDomain site.example.com xxx.xxx.xxx.xxx
    ProxyPassReverseCookiePath / /some/prefix/
    ProxyHTMLExtended On
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

几乎一切正常。我无法发布新帖子(文本编辑器未正确加载)。Iceweasel 的 (Firefox) 开发者模式说:

(...)
[00:13:33.365] GET http://xxx.xxx.xxx.xxx/some/prefix/wp-includes/js/tinymce/langs/pl.js?wp-mce-4107-20141130 [HTTP/1.1 404 Not Found 399ms]
(...)
[00:13:33.648] Failed to load: http://xxx.xxx.xxx.xxx/some/prefix/wp-includes/js/tinymce/langs/pl.js
[00:13:46.733] POST http://xxx.xxx.xxx.xxx/wp-admin/admin-ajax.php [HTTP/1.1 404 Not Found 102ms]
Run Code Online (Sandbox Code Playgroud)

我省略了非错误。在我看来,Apache 并没有重写某些东西。有任何想法吗?

reverse-proxy wordpress apache-2.2

7
推荐指数
1
解决办法
6980
查看次数

Nginx 作为负载均衡器。连接上游时频繁上游超时(110:连接超时)

我正在尝试在 centos 7 虚拟机上使用 nginx 作为负载平衡器来替换老化的 Coyote Point 硬件设备。但是,在我们的一个 web 应用程序中,我们在日志中看到频繁且持续的上游超时错误,并且客户端在使用系统时报告会话问题。

这是我们 nginx.conf 中的相关部分

user  nginx;
worker_processes  4;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

upstream farm {
   ip_hash;

   server www1.domain.com:8080;
   server www2.domain.com:8080 down;
   server www3.domain.com:8080;
   server www4.domain.com:8080;
}

server {
        listen 192.168.1.87:80;
        server_name host.domain.com;
        return         301 https://$server_name$request_uri;
}

server {
    listen 192.168.1.87:443 ssl;
    server_name host.domain.com;

    ## Compression
    gzip              on;
    gzip_buffers      16 8k;
    gzip_comp_level   4;
    gzip_http_version 1.0;
    gzip_min_length   1280;
    gzip_types        text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy load-balancing

7
推荐指数
1
解决办法
8927
查看次数

在 HTTP 1 服务器前面设置 HTTP 2 反向代理是否值得?

假设我在 IIS 前将 Nginx 设置为反向代理,并在 Nginx 上为浏览器启用 HTTP/2 支持。

我会看到任何好处吗?

reverse-proxy http2

7
推荐指数
1
解决办法
5965
查看次数

调试 Nginx 缓存未命中:尽管代理有效,但仍出现大量未命中

我的代理缓存路径设置为非常高的大小

proxy_cache_path  /var/lib/nginx/cache  levels=1:2   keys_zone=staticfilecache:180m  max_size=700m;
Run Code Online (Sandbox Code Playgroud)

并且使用的大小仅为

sudo du -sh *
14M cache
4.0K    proxy
Run Code Online (Sandbox Code Playgroud)

代理缓存有效设置为

proxy_cache_valid 200 120d;
Run Code Online (Sandbox Code Playgroud)

我通过以下方式跟踪 HIT 和 MISS

add_header X-Cache-Status $upstream_cache_status;
Run Code Online (Sandbox Code Playgroud)

尽管有这些设置,我还是看到了很多未命中。这是我在一小时前故意运行缓存预热器的页面。

我如何调试这些 MISS 发生的原因?我如何确定未命中是否是由于驱逐、到期、某些流氓头球等造成的?Nginx 是否为此提供命令?

编辑:完整配置

    # at http level
    proxy_cache_path  /var/lib/nginx/cache  levels=1:2 inactive=400d keys_zone=staticfilecache:180m  max_size=700m;
    proxy_temp_path /var/lib/nginx/proxy;
    proxy_connect_timeout 30;
    proxy_read_timeout 120;
    proxy_send_timeout 120;
    #prevent header too large errors
    proxy_buffers 256 16k;
    proxy_buffer_size 32k;
    #httpoxy exploit protection
    proxy_set_header Proxy "";

    # at server level 
    add_header Cache-BYPASS-Reason $skip_reason;

    # define nginx variables …
Run Code Online (Sandbox Code Playgroud)

nginx cache reverse-proxy

7
推荐指数
2
解决办法
1万
查看次数

用于 ssl 终止的 nginx 流代理与 http 代理

我正在运行一个 HTTP 服务并希望将nginxSSL 终止放在前面。这可以通过两种方式完成;要么作为stream代理

stream {
    server {
        listen               443 ssl;
        ssl_certificate      /certs/fullchain.pem;
        ssl_certificate_key  /certs/privkey.pem;
        proxy_pass           ip-for-backend-service:80;
    }
}
Run Code Online (Sandbox Code Playgroud)

或作为http代理

http {
    server {
        listen 443 ssl;
        ssl_certificate      /certs/fullchain.pem;
        ssl_certificate_key  /certs/privkey.pem;

        location / {
            proxy_pass       http://ip-for-backend-service:80;
            proxy_set_header ...;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

乍一看,stream代理的配置似乎简单得多,因为您不必添加一堆额外的标头(proxy_set_header等)和其他配置。

我试图了解这两种方法之间的优缺点,特别是我有以下问题:

  1. 这两种方法是否会泄漏有关后端服务的更多信息?例如,是否ip-for-backend-service可见?

  2. 这两种方法都能更好地抵御攻击吗?我想如果后端服务有缺陷,它会通过这两个选项可见/可利用吗?

  3. 哪个选项更有效?我认为stream选项可能会更快,因为它只是路由流量并且中间没有 http 服务器?

nginx reverse-proxy

7
推荐指数
1
解决办法
2611
查看次数