标签: reverse-proxy

Nginx 客户端证书身份验证:如何排除 IP 地址

我有 Nginx 作为 Web 服务器的代理运行,并且我想使用 TLS/SSL 客户端证书来保护访问。

这是我的 ssl 配置

server {
    listen                  443 ssl; 
    server_name             www.domain.com;
    ssl_certificate         /etc/nginx/ssl/domain/server.crt; 
    ssl_certificate_key     /etc/nginx/ssl/domain/server.key; 
    ssl_client_certificate  /etc/nginx/ssl/clients/client_ca.pem
    ssl_verify_client on;
Run Code Online (Sandbox Code Playgroud)

它工作得很好 - 但现在我需要允许在没有客户端证书的情况下从一个特定的 IP 地址访问我的网站。

有没有可能用 nginx 来做到这一点?

谢谢 :-)

ssl nginx reverse-proxy ssl-certificate

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

NGINX:队列中查询的请求限制超时行为(突发)

目前,我们的队列大小为 3000 个请求。

location /api/v2 {
     limit_req zone=bursted burst=3000;
     include /etc/nginx/proxy.conf;
 }
Run Code Online (Sandbox Code Playgroud)

速率限制为每秒 10 个请求。

 limit_req_zone $limit zone=api_slow:10m rate=1r/s;
 limit_req_zone $server_name zone=bursted:10m rate=10r/s;
Run Code Online (Sandbox Code Playgroud)

保持活动超时为 30 秒。换句话说,当队列已满时,每 30 秒应拒绝 2700 个请求,并显示错误代码 408。

 reset_timedout_connection on;
 client_body_timeout 10;
 send_timeout 2;
 keepalive_timeout 30;
Run Code Online (Sandbox Code Playgroud)

在高峰时段,我在日志中找不到任何请求,由于超时,该请求被 NGINX 拒绝,错误代码为 408,而请求正在队列中等待转发到 servlet 容器。仅拒绝并返回 503 错误代码,这与请求速率开销相对应。

delaying request, excess: 2958.320, by zone "bursted"
limiting requests, excess: 3000.730 by zone "bursted"
Run Code Online (Sandbox Code Playgroud)

如果此类队列中的请求挂起时间过长,NGINX 是否会通过超时拒绝这些请求?这个超时是什么?它的配置在哪里?

nginx reverse-proxy 503-error high-load http-status-code-408

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

使用 Nginx 反向代理的代理协议

概述

我有一个指向 SaaS 应用程序 (BigCommerce) 的 Nginx 反向代理设置。虽然我的配置运行良好,但我无法确保客户端 IP显示在 SaaS 后端而不是反向代理 IP中。在 SaaS 后端,没有机制可以添加或使用受信任的 IP 地址列表set_real_ip_fromreal_ip_header因此我的任务是在反向代理上实施proxy_protocol,以确保 IP 标头使用客户端的 IP 而不是通过反向代理传递。它自己的。

配置

http server上下文中

    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_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host:$server_port;

    # support http 1.1 persistent connections
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
Run Code Online (Sandbox Code Playgroud)

问题

当我在 http 服务器上下文中启用proxy_protocol指令listen时(例如listen 443 ssl http2 proxy_protocol),我Broken Header …

nginx reverse-proxy transparent-proxy

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

如何使用 UFW 允许本地接口上的所有流量?

我已经将 Apache 作为另一个 Docker 服务的反向代理运行。我得到了它的工作,但一旦我启用 UFW,所有连接都会被阻止,并显示以下错误消息:

12月29日23:50:23 vps520941内核:[2870586.522706] [UFW BLOCK] IN= OUT=br-xxxxxxxxx SRC=172.24.0.1 DST=172.24.0.3 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=38755 DF协议=TCP SPT=54620 DPT=22300 窗口=292

这是以下结果ifconfig

br-xxxxxxxxx Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx
          inet addr:172.24.0.1  Bcast:172.24.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1630 (1.6 KB)  TX bytes:2896 (2.8 KB)
Run Code Online (Sandbox Code Playgroud)

以前,我曾尝试允许网络接口 IP 上的流量,但每次重新启动时它都会发生变化,因此这不起作用。

我在 ufw 中有这样的东西:ufw allow in from 172.22.0.0/24 to any port但是当然这不再起作用了,因为接口 IP 现在是 …

networking reverse-proxy ufw

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

如何根据主机名在同一 IP 上的不同网络服务器之间切换?

在我的地方,我有 4 台服务器,每台都运行 Win2008r2-WEB,作为网络服务器运行所有不同类型的服务器(TomCat、IIS、Apache、ZendServer),每台服务器也有不同的 IP 地址(10.0.0.0/24)

有没有办法根据主机名将流量路由到每台服务器?(例如:apache.domain.org、iis.domain.org、tomcat.domain.org、zend.domain.org)

显然,我无法将 A 记录更改为内部 IP,并且我无权更改端口。

同样由于代理原因,我不能只使用其他端口,我只能访问 :80 传入。

iis reverse-proxy windows-server-2008-r2 apache-2.2

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

nginx反向代理多个位置

我想为多个应用程序制作一个反向代理。
像这样的东西:

https://proxyip/app1 -> https://10.10.0.1/
https://proxyip/app2 -> https://10.10.0.2/
etc.
Run Code Online (Sandbox Code Playgroud)

目前,我的配置是:

server {
    listen 443 ssl;
    server_name _;

    ssl_certificate     /etc/nginx/cert.crt;
    ssl_certificate_key /etc/nginx/cert.key;

    proxy_set_header    X-Real-IP               $remote_addr;
    proxy_set_header    Host                    $host;
    proxy_set_header    X-Forwarded-For         $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto       $scheme;

    client_max_body_size 0;

    error_log   syslog:server=unix:/dev/log;
    access_log  syslog:server=unix:/dev/log;

    location /app1/ {
        proxy_pass https://10.10.0.1/;
    }

    location /app2/ {
        proxy_pass https://10.10.0.2/;
    }

    location ~ /\. {
        deny all;
    }
}
Run Code Online (Sandbox Code Playgroud)

但没有任何作用。
当我转到https://proxyip/app1它时,它会将我重定向到https://proxyip/Account/login404。它应该转到https://proxyip/app1/Account/login. 这是日志:

Jun 06 15:05:44 my_proxy nginx[3829]: my_proxy nginx: 192.168.0.10 - - [06/Jun/2017:15:05:44 +0300] …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy

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

nginx 在同一台主机上提供 Elasticsearch 和 Kibana

对 nginx 完全陌生,我需要一个 conf 文件来使 nginx 充当反向代理,以在同一主机上向具有不同 url 路径的 elasticsearch 和 kibana 提供请求。我的意思是,我想要:

localhost/es -> localhost:9200
localhost/kibana -> localhost:5601
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到?

谢谢

nginx reverse-proxy elasticsearch kibana

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

docker nginx 代理与 poste.io 邮件服务器

我想知道这是否可能,如果可以,我如何在一台专用服务器上同时运行 nginx-proxy 和 poste.io 邮件服务器?

我可以单独运行这两个容器,但是当我尝试同时运行这两个容器时,它说我无法运行后一个容器,因为端口 443 已被另一个容器使用。

现在,当我只使用 nginx 反向代理时,我会在服务器上运行多个网站,所有这些网站都会公开端口 80 和 443 以及代理本身,这让我很困惑为什么我不能运行另一个容器做同样的事情(是的,我知道通常两个进程不应该能够使用同一个端口而不需要一些摆弄)。

我使用以下代理: https: //github.com/jwilder/nginx-proxy

我的邮件服务器使用https://poste.io

这是我在服务器上运行的网站 docker-compose 之一的示例。

application:
build: code
volumes:
    - /websites/domain:/var/www/laravel
    - /docker/webs/domain/logs:/var/www/laravel/storage/logs
tty: true
redis:
    image: redis:alpine
db:
    image: mariadb:10.2
    environment:
        MYSQL_ROOT_PASSWORD: toor
        MYSQL_DATABASE: laravel
        TEST_DB_NAME: laravel_test
        MYSQL_USER: laravel
        MYSQL_PASSWORD: laravel
php:
    build: php7-fpm
    volumes_from:
        - application
    links:
        - db
        - redis
nginx:
    build: nginx
    links:
        - php
    volumes_from:
        - application
        - nginx-proxy
    volumes:
        - ./logs/nginx/:/var/log/nginx
    environment:
        - VIRTUAL_HOST=www.domain.com
Run Code Online (Sandbox Code Playgroud)

在我的 nginx …

email-server reverse-proxy docker

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

子目录中 nginx 反向代理后面的 Jenkins

我正在努力在 nginx 后面的子目录中设置 Jenkins。有 2 个应用程序在本地主机上运行。其中之一是 jenkins,可以通过访问 foo.com/jenkins 进行访问。另一个应用程序位于 foo.com/ 上。

对詹金斯的请求不能有前缀/jenkins/,因此我重写(删除)它。但是,尽管 jenkins 的初始页面已加载,但所有资源(js、css...)都丢失了,并且网站看起来很丑陋。原因似乎是请求没有 jenkins 前缀并被重定向到其他应用程序(请参阅屏幕截图中的链接)。

如何将请求从詹金斯页面路由到正确的处理程序?

server {
    listen 80;
    server_name foo.com;  

    # jenkins server in subdir:      
    location ^~ /jenkins/ {
       rewrite ^/jenkins(.*) /$1 break;
       proxy_pass http://127.0.0.1:9500/;
    }
    # main app:
    location / {
        proxy_pass http://127.0.0.1:8081;
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

nginx reverse-proxy jenkins

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

如何使用动态后端服务器设置 Apache 2 反向代理?

我想使用基于名称的虚拟主机将 Apache 2 设置为反向代理,以确定如何将请求路由到后端服务器。足够简单。

问题是这些后端服务器可能会以动态方式添加和删除。我的第一个想法是以编程方式重写 Apache 配置文件,并apachectl graceful在后端服务器启动或关闭时调用。这似乎不是正确的解决方案。什么是更好的方法来实现这一点?

我需要能够优雅地将名称处理转移到不同的后端服务器。例如,Backend-Server-A 可能正在处理对 example.com 的请求。监控过程可能会判定 Backend-Server-A 陈旧(内存使用过多,有新版本的服务器代码来处理 example.com 等)。监控进程启动 Backend-Server-B,它将很快处理对 example.com 的请求。Apache 应该将 example.com 的任何新请求定向到 Backend-Server-B,但允许 Backend-Server-A 当前正在处理的任何待处理请求在 Backend-Server-A 被我的监控进程关闭之前完成。

注意:我最初将其发布在 Stack Overflow 上。)

reverse-proxy apache-2.2

0
推荐指数
1
解决办法
3597
查看次数