我有 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 来做到这一点?
谢谢 :-)
目前,我们的队列大小为 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
我有一个指向 SaaS 应用程序 (BigCommerce) 的 Nginx 反向代理设置。虽然我的配置运行良好,但我无法确保客户端 IP显示在 SaaS 后端而不是反向代理 IP中。在 SaaS 后端,没有机制可以添加或使用受信任的 IP 地址列表set_real_ip_from,real_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 …
我已经将 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 现在是 …
在我的地方,我有 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 传入。
我想为多个应用程序制作一个反向代理。
像这样的东西:
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 完全陌生,我需要一个 conf 文件来使 nginx 充当反向代理,以在同一主机上向具有不同 url 路径的 elasticsearch 和 kibana 提供请求。我的意思是,我想要:
localhost/es -> localhost:9200
localhost/kibana -> localhost:5601
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到?
谢谢
我想知道这是否可能,如果可以,我如何在一台专用服务器上同时运行 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 …
我正在努力在 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)
我想使用基于名称的虚拟主机将 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 ×10
nginx ×6
apache-2.2 ×2
503-error ×1
docker ×1
email-server ×1
high-load ×1
iis ×1
jenkins ×1
kibana ×1
networking ×1
ssl ×1
ufw ×1