我有一个名为 的站点http://example.com,其中运行着一个可以在http://example.com/app1. app1 位于 nginx 反向代理后面,如下所示:
location /app1/ {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Run Code Online (Sandbox Code Playgroud)
将尾部斜杠添加到该proxy_pass字段可以让我“删除” URL 的 /app1/ 部分,至少就应用程序而言。所以 app1 认为它正在获取对根 url 的请求(例如,我在 app1 中有一个路由位于'/',而不是'/app1')。
但是,我想让 nginx 不区分大小写。所以无论我去http://example.com/App1还是http://example.com/APP1,它仍然应该将请求转发到app1,并删除url的/app1/部分。
当我尝试使用 nginx 不区分大小写的规则时,它不允许将 URI 的其余部分转发到 app1。
location ~* /app1/ {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade; …Run Code Online (Sandbox Code Playgroud) 我正在努力使用signalr3和nginx反向代理配置,我的nginx cfg看起来像这样:
server {
listen 80;
server_name my.customdomain.com;
location / {
root /pages/my.customdomain.com;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
## send request back to kestrel ##
location /proxy/ {
proxy_pass http://xxxxxxxxxx.westeurope.cloudapp.azure.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;
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里想念什么?
当我浏览我的页面时,我收到了OK
GET /proxy/notifications/negotiate
Run Code Online (Sandbox Code Playgroud)
和
GET /proxy/notifications?id=uFQtMDg1dXib6LGvUssQhQ
Run Code Online (Sandbox Code Playgroud)
但是404用于POST
POST proxy/notifications?id=uFQtMDg1dXib6LGvUssQhQ
Run Code Online (Sandbox Code Playgroud)
请停下来!
PS.我的中心很简单......
[AllowAnonymous]
public class NotificationHub : Hub
{
}
Run Code Online (Sandbox Code Playgroud) 我已经研究了RoR 5.0.0 ActionCable wss WebSocket握手的答案:意外的响应代码:301,但不适用于我的情况。
我使用nginx代理作为在docker-containers中运行的多个Web服务器的前端。我使用来自https://github.com/jwilder/nginx-proxy的nginx-config-template
现在在我的docker-container中,我有另一个具有以下配置的nginx:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server my-websocket-docker-container:8080;
}
server {
root /src/html;
location /websocket/ {
resolver 127.0.0.11 ipv6=off;
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
...
}
Run Code Online (Sandbox Code Playgroud)
当尝试连接到wss://example.com/websocket时,出现关于意外响应代码301的上述错误。当我手动卷曲websocket-url时,我可以看到nginx响应告诉我“ 301永久移动”。但为什么?这是哪里来的?
有人可以帮忙吗?谢谢!
如果上游启动(max-age 1)绕过缓存并在关闭时使用缓存(proxy_cache_use_stale),我创建了以下配置:
proxy_cache_path /app/cache/ui levels=1:2 keys_zone=ui:10m max_size=1g inactive=30d;
server {
...
location /app/ui/config.json {
proxy_cache ui;
proxy_cache_valid 1d;
proxy_ignore_headers Expires;
proxy_hide_header Expires;
proxy_hide_header Cache-Control;
add_header Cache-Control "max-age=1, public";
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
add_header X-Cache-Date $upstream_http_date;
proxy_pass http://app/config.json;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当上游关闭并且客户端仅获得 504 Gateway Timeout 时不使用缓存。我已经阅读了以下文章:
https://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_cache_use_stale
如何配置 NginX 仅在后端关闭时才提供缓存内容(5xx 响应代码)?
https://serverfault.com/questions/752838/nginx-use-proxy-cache-if-backend-is-down
它不像我期望的那样工作。任何帮助表示赞赏。
caching nginx nginx-location nginx-reverse-proxy nginx-config
我有一个 NGINX 服务器作为反向代理运行。代理适用于 Windows 主机,但是我有一个 owncloud 服务器,代理会将 url 重新写入内部主机名或 IP 地址。ex(我输入 cloud.example.com 并且我的网址栏将更改为 10.1.1.19,这是无法通过 wan 解析的
我检查了 DNS 记录并确保 NGINX 可以解析主机名。还尝试将 http 流量转发到云服务器以确保使用域名不是问题。
server {
listen 80;
listen [::]:80;
server_name example.com;
location / {
proxy_pass http://10.1.1.16:80/;
}
}
server {
listen 80;
listen [::]:80;
server_name cloud.example.com;
location / {
proxy_pass http://10.1.1.19:80/;
}
}
server {
listen 80;
listen [::]:80;
server_name remote.example.com;
location / {
proxy_pass http://10.1.1.17:80/;
}
}
Run Code Online (Sandbox Code Playgroud)
我只需要 NGINX 作为“cloud.example.com”的代理运行而不是重写 URL
我在 NGINX入口控制器后面的 Kubernetes 1.13 集群中托管一个 Web 应用程序。的Ingress指定path: /my-webapp/?(.*)和annotations:
{ nginx.ingress.kubernetes.io/rewrite-target: /$1 }使得所述web应用可以从在集群外部够到http://my-cluster/my-webapp。(入口控制器公开为my-cluster.)
剩下的一个问题是,webapp 包含引用例如 CGI 脚本和 CSS 样式表的“相对”URL。例如,<link rel="stylesheet" type="text/css" href="/my-stylesheet.css" />当前未加载样式表。我认为这是因为浏览器在错误的 URL 上请求它(http://my-cluster/my-webapp/my-stylesheet.css应该是正确的)并且需要更多的注释。
这种情况下正确的配置是什么?
UPDATE检查器显示浏览器当前从 URL 请求样式表http://my-cluster/my-stylesheet.css,这确实是错误的,需要修复。
更新 这看起来像是一个与 NGINX 反向代理相关的问题,而不是 Kubernetes NGINX 入口控制器。我想知道建议的食谱是否以及如何在这种特殊情况下也适用。首先,我尝试切换到引用样式表的相对 URL(根据已接受答案中的配方 One),但这到目前为止还没有奏效:
,尽管它显示,但<link rel="stylesheet" type="text/css" href="my-stylesheet.css" />浏览器显然仍在尝试从 获取样式表在 URL 栏中,检查器报告的 URL 与.http://my-cluster/my-stylesheet.csshttp://my-cluster/my-webappbaseURI
我们的反向代理具有以下配置:
location ~ ^/stuff/([^/]*)/stuff(.*)$ {
set $sometoken $1;
set $some_detokener "foo";
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 Authorization "Basic $do_token_decoding";
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_redirect https://place/ https://place_with_token/$1/;
proxy_redirect http://place/ http://place_with_token/$1/;
resolver 10.0.0.2 valid=10s;
set $backend https://real_storage$2;
proxy_pass $backend;
}
Run Code Online (Sandbox Code Playgroud)
现在,所有这些工作都可以进行,直到real_storage旋转服务器为止。例如,say real_storage来自foo.com。这是一个负载均衡器,可直接连接到两个服务器:1.1.1.1和1.1.1.2。现在,将1.1.1.1删除并替换为1.1.1.3。但是,nginx继续尝试1.1.1.1,导致:
epoll_wait()报告客户端过早关闭了连接,因此在连接到上游时,上游连接也关闭了,客户端:...,服务器:...,请求:“ GET ... HTTP / 1.1”,上游:“ https: // 1.1.1.1:443 / ...“,主持人:” ...“
请注意,上游是旧服务器,如先前的日志所示:
[调试] 1888#1888:* 570837连接到1.1.1.1:443,FD:60#570841
这是在我们这边还是为我们的主机配置错误的东西real_storage?
*我能发现的最接近我的问题的地方是https://mailman.nginx.org/pipermail/nginx/2013-March/038119.html ...
我们添加了
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 …
请在标记为重复之前阅读完整的问题,因为它不是重复的问题。我有一个 VPS,我想在其上部署多个 Web 应用程序(我已经阅读了相关帖子,当我们直接拥有子容器时,它们是完美的)。我的问题是不同的。我想管理每个具有自己的 nginx 的 Web 应用程序以路由到它的子域以及一些与它们相关的静态网站。我有两个码头工人。我的网络如下所示。图片。
我的 NGINX 反向代理应该负责将域路由到相应的 nginx 容器。我不确定是否可能(这就是我寻求帮助的原因)。如果有人可以提供更好的理解,我愿意接受建议。以下是我对 nginx 代理容器和其他 Web 应用程序 docker yaml 文件代码的配置。我用过NGINX 代理
NGINX 代理 Docker 撰写文件
version: "3.7"
services:
nginx-proxy:
image: jwilder/nginx-proxy:alpine
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
default:
external:
name: nginx-proxy
Run Code Online (Sandbox Code Playgroud)
网络应用 1 docker-compose.yml
version: "3.7"
networks:
default:
external:
name: nginx-proxy
yoda-network:
driver: bridge
services:
adminer:
container_name: ${APP_NAME}_adminer
image: adminer
depends_on:
- mysql
expose:
- 8080
environment:
VIRTUAL_HOST: yodaledger.com
VIRTUAL_PORT: 8080
networks:
- yoda-network …Run Code Online (Sandbox Code Playgroud) nginx docker jwilder-nginx-proxy nginx-reverse-proxy nginx-config
我正在尝试使用Nginx配置实现代理
这个想法是让一个http服务器托管我的网站(我的SPA)。并使我的http服务器上的一条路由指向另一个api。
这是我下面的nginw配置文件
client_max_body_size 100M;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
location ^~ /proxyapi/ {
proxy_read_timeout 180s;
proxy_send_timeout 180s;
proxy_pass http://localhost:5000/;
}
location ~* /static/* {
try_files $uri =404;
expires 1y;
access_log off;
add_header Cache-Control "public";
}
# Any route that doesn't have a file extension (e.g. /devices)
location / {
try_files $uri $uri/ /index.html;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = …Run Code Online (Sandbox Code Playgroud) 有人熟悉 nginx 吗?我试图在流块中以有条件的方式启用 proxy_protocol,即对于某些端点,我希望添加代理协议标头。对于其他人我不想添加它。查看文档,proxy_protocol 无法获取变量(尝试了 map 指令) 关于如何实现此目的有什么建议吗?在这里添加了我的 nginx 配置。 http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_protocol
这是有问题的部分proxy_protocol $proxy_state;
map $ssl_preread_server_name $proxy_state{
default on;
facebook.com off;
}
server {
listen 8443 ;
resolver 8.8.8.8 ipv6=off;
proxy_pass $server;
proxy_protocol $proxy_state;
ssl_preread on;
}
Run Code Online (Sandbox Code Playgroud)
以下是完整的配置
error_log logs/error.log;
events {
}
stream {
map $ssl_preread_server_name $server {
# default 127.0.0.1:8080;
default unix:/var/run/nginx.sock;
include /home/user/allow_url_list;
}
map $ssl_preread_server_name $proxy_state{
default on;
facebook.com off;
}
server {
listen 8443 ;
resolver 8.8.8.8 ipv6=off;
proxy_pass $server;
proxy_protocol $proxy_state;
ssl_preread on;
} …Run Code Online (Sandbox Code Playgroud)