标签: nginx-reverse-proxy

traefik 中的 nginx `proxy_redirect` (重定向而不更改 url)

如果可能的话,基本上这在 traefik 中会是什么样子:

location  /blog/ {
    proxy_pass https://blog.example.com/;
    proxy_redirect https://blog.example.com/ https://www.example.com/blog/;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host blog.example.com;
} 
Run Code Online (Sandbox Code Playgroud)

我尝试过,在我的 docker-compose 中配置:

- 'traefik.frontend.redirect.regex=^https://example.com/blog/(.*)$$'
- 'traefik.frontend.redirect.replacement=https://blog.example.com/$$1'
Run Code Online (Sandbox Code Playgroud)

这确实有效,但它只是重定向到https://blog.example.com,我想保留原始网址https://example.com/blog/并显示来自 的内容https://blog.example.com

用traefik可以实现吗?

redirect reverse-proxy traefik nginx-reverse-proxy traefik-middleware

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

配置 nginx 发出后台请求

我正在构建一个应用程序,需要对 api-数据组合使用情况进行一些分析。下面是我的 nginx 配置 -

location /r/ {
    rewrite /r/(.*)$ http://localhost:3000/sample/route1/$1 redirect;
    post_action /aftersampleroute1/$1;
}
location /aftersampleroute1/ {
    rewrite /aftersampleroute1/(.*) /stats/$1;
    proxy_pass http://127.0.0.1:3000;
}
Run Code Online (Sandbox Code Playgroud)

location/r/用于将浏览器请求重定向http://localhost:80/r/quwjDP4us到 api /sample/route1/quwjDP4us,该 api 使用 idquwjDP4us执行某些操作。现在在后台我想将 id 传递quwjDP4us给统计 api/stats/quwjDP4us,该 api 会更新该 id 的数据库记录。

当我启动 nginx 并发出请求时,http://localhost:80/r/quwjDP4usnginx 成功将我的请求重定向到我的应用程序,但不会在后台向 stats api 发出第二个请求。我缺少什么?

注意 -post_action不包含在 nginx 文档中,是否有我可以使用的备用模块/指令?

proxy nginx nginx-location nginx-reverse-proxy

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

为什么我在 nginx 反向代理上收到 404?

下面是我的配置,除了路由之外,我在定义的所有路由上都收到 404 well-known,我不明白为什么。

如果我向http://example.tech/connect发出请求,我会收到 404,如果我向http://api.example.tech发出请求,我也会收到 404。

我看不出我哪里出了问题,因为这看起来应该可行!

user  nginx;
worker_processes  auto;

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


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$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  warn;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #REMOVE REFERENCE TO FILES THAT HAVE  "server" and "location" blocks in them so we can do it all in this file …
Run Code Online (Sandbox Code Playgroud)

nginx nginx-location nginx-reverse-proxy

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

Dockercompose、Nginx、解析器不工作

我使用具有以下配置的 nginx 容器:

set $ui http://ui:9000/backend;
resolver 127.0.0.11 valid=5m;
proxy_pass $ui;
Run Code Online (Sandbox Code Playgroud)

这是必需的,因为 nginx 启动时“ui”容器不一定会启动。这可以避免“在上游找不到主机...”错误。

但现在,即使 ui-container 已启动并运行(它们都位于 docker-compose.yml 中定义的同一网络中),我也会收到 404 错误。当我在没有变量、没有解析器的情况下代理传递并首先启动 ui 容器时,一切正常。

现在我正在寻找为什么 docker 无法解决它。我可以手动添加一条到http://ui的假路由,当 ui-container 启动时该路由会被替换吗?那会是哪里呢?或者我可以修复解析器吗?

nginx docker docker-compose nginx-reverse-proxy

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

Nginx 轮询负载均衡未达到预期

我们正在连接到一个系统,其中有 4 个端口被暴露来服务 grpc 请求。使用 nginx 作为负载均衡器转发 4 个客户端 grpc 请求,配置如下:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent"';

    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
    upstream backend{
        #least_conn;
        server localhost:9000 weight=1 max_conns=1;
        server localhost:9001 weight=1 max_conns=1;
        server localhost:9002 weight=1 max_conns=1;
        server localhost:9003 weight=1 max_conns=1;
        }

    server {
        listen 80 http2;

        access_log /tmp/access.log main;
        error_log …
Run Code Online (Sandbox Code Playgroud)

nginx nginx-reverse-proxy nginx-config

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

NGINX 将 SMTP 身份验证凭据转发到下一个服务器?

使用此处描述的 NGINX SMTP 中继功能来代理商业 SMTP 服务器,有效地“白标”中继地址(包括证书),同时保留身份验证。

配置 NGINX 如下:

mail {
    server_name smtp.proxy.mydomain.net;
    auth_http   127.0.0.1:9000/auth;
    proxy_pass_error_message on;
    xclient off;
    smtp_capabilities "8BITMIME" "STARTTLS" "PIPELINING" "ENHANCEDSTATUSCODES";
    starttls on;
    ssl_certificate     /etc/letsencrypt/live/smtp.proxy.mydomain.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/smtp.proxy.mydomain.net/privkey.pem;
    ssl_protocols       TLSv1.2;
    ssl_session_cache   shared:SSL:10m;

    server {
        listen    587;
        protocol  smtp;
        smtp_auth login plain;
    }
}
Run Code Online (Sandbox Code Playgroud)

当客户端请求 STARTTLS 时,NGINX 使用该证书,并且客户端(在我的例子中swaks)将 AUTH LOGIN 凭据发送到 NGINX。

NGINX 然后调用mail_auth_http_module OK。我有一个简单的 Python Flask 应用程序,它返回指示始终接受身份验证的标头以及服务器地址。您可以在此处查看身份验证服务器对curl请求的响应:

$ curl -v localhost:9000/auth
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) …
Run Code Online (Sandbox Code Playgroud)

nginx nginx-reverse-proxy

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

如何通过nginx反向代理调试远程Java应用程序

我需要调试在 nginx 反向代理后面运行的远程 java 应用程序。我收到以下错误:

无法连接到远程调试对象虚拟机。原因:java.io.IOException:收到无效握手

为了实现这一点,正确的 nginx 配置应该是什么?

我已通过直接定位应用程序的主机,成功将 vscode java 调试器附加到远程 java 应用程序。

解析器是 127.0.0.11 因为我使用的是 nginx docker 镜像。

我的 nginx 配置文件app.xyz.com.conf在 conf.d 中:

server {
    listen 1043;
    resolver 127.0.0.11 valid=30s;
    server_name app.xyz.com;
    include /etc/nginx/mime.types;
    location / {
        proxy_buffer_size 8k;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header X-Real-IP $remote_addr;
        set $upstream "http://java-app:1043";
        proxy_pass $upstream;
        client_max_body_size 10M;
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

java remote-debugging nginx jdwp nginx-reverse-proxy

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

Nginx 接受 proxy_pass 中的尾部斜杠或不接受尾部斜杠

我遇到了以下问题,我希望能够从带有尾部斜杠不带尾部斜杠的主网站访问代理传递的位置(托管 docker 容器中的 React/NextJs webApp)。

目前,当我点击:

http://my-website.com/test # 这有效

但当我击中时:

http://my-website.com/test/ # 失败并返回 404

我希望能够同时访问这两个网址。我缺少什么?

   ### Default Server ###
    server {
        listen 80;
        root /usr/site;
        if ($http_x_forwarded_proto = "http") {
            return 301 https://$host$request_uri;
        }
        location ~/test(.*)$ {
                set $upstream_endpoint http://$docker_container_url;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_pass $upstream_endpoint$1/;
                proxy_set_header    Host    $host;
                proxy_cache_bypass  $http_upgrade;
        }
    }
Run Code Online (Sandbox Code Playgroud)

nginx nginx-reverse-proxy nginx-config

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

使用 Traefik 或 NGINX 在 Docker Swarm 上正确处理 Socket.io

我正在使用 Socket.IO 在 Node.js 中开发一个应用程序,该应用程序使用 Docker Swarm 进行部署,并且我想要选择应用程序服务的多个实例。但是,当存在多个实例时,应用程序就会失败。该故障涉及浏览器中每个 Socket.IO 消息的错误、​​消息中应发送的数据从未到达等。

Docker Stack文件有四个服务

  • Node.js 应用程序
  • 在多节点 Socket.IO 服务中处理 Socket.IO 和会话所需的 REDIS 实例 - 是的,我已经阅读了有关此内容的 Socket.IO 文档,实现了 SessionStore connect-redis,并用于socket.io-redis执行多节点 Socket.IO
  • 数据库(MySQL)
  • 反向代理 - 我使用过 NGINX 和 Traefik

在 Socket.IO 中,有一个例行的 keepalive 请求,例如 GET 上的请求/socket.io/?EIO=3&transport=polling&t=NLjcKJj&sid=X5UnuTjlYNJ4N8OsAAAH。该请求可在反向代理的日志文件中看到,并由应用程序处理。Engine.IO 的调试输出表明它收到了这些请求。

具体来说:

2020-10-28T05:06:02.557Z Net read redis:6379 id 0
2020-10-28T05:06:02.557Z socket.io:socket socket connected - writing packet
2020-10-28T05:06:02.557Z socket.io:socket joining room X5UnuTjlYNJ4N8OsAAAH
2020-10-28T05:06:02.557Z socket.io:client writing packet {"type":0,"nsp":"/"}
2020-10-28T05:06:02.557Z socket.io:socket joined room [ 'X5UnuTjlYNJ4N8OsAAAH' ]
2020-10-28T05:06:02.656Z …
Run Code Online (Sandbox Code Playgroud)

socket.io docker-swarm traefik nginx-reverse-proxy

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

selenium.common.exceptions.WebDriverException:消息:未知错误:net::ERR_CONNECTION_RESET

我对这些技术很陌生。
我的操作系统是 ubuntu-18.04,并使用 anaconda 创建一个虚拟环境,并通过 pip 安装和所有必要的软件包。我还安装了相同版本的 Chrome 和 chromedriver 来运行 selenium。我还在/etc/systemd/system下创建了一个test.service

我无法在 stackoverflow 中发布图片。该问题可以在屏幕截图中使用命令 ( )
看到sudo systemctl status test

Gunicorn[25770]:文件“/home/anaconda/port8788/hct/hct_information.py”,第21行,在testDriver中
gunicorn[25770]:driver.get(url)
gunicorn[25770]:文件“/home/chaoyang/anaconda3 /envs/selenium/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py”,第 333 行,在 get
Gunicorn[25770] 中:self.execute(Command.GET, {'url': url })
gunicorn[25770]:文件“/home/chaoyang/anaconda3/envs/selenium/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py”,第321行,执行
gunicorn[25770] :self.error_handler.check_response(响应)
gunicorn[25770]:文件“/home/chaoyang/anaconda3/envs/selenium/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py”,第242行,在 check_response
Gunicorn[25770] 中:引发异常类(消息、屏幕、堆栈跟踪)gunicorn[25770]:selenium.common.exceptions.WebDriverException:消息:未知错误:net::ERR_CONNECTION_RESET Gunicorn[25770]:(会话信息:无头镀铬=86.0.4240.183)

我的烧瓶代码如下:

import flask
from flask import request
import argparse
from hct import hct_information as hct

app = flask.Flask(__name__)

@app.route("/test")
def test():
    return hct.testDriver('https://www.google.com/')

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)

我的硒代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options …
Run Code Online (Sandbox Code Playgroud)

python gunicorn selenium-webdriver nginx-reverse-proxy ubuntu-18.04

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