标签: nginx-reverse-proxy

带有NGINX代理服务器的Keycloak没有验证rest api

我有一个示例应用程序,可以在没有nginx的情况下在本地正确保护其余的api.现在,当我把它放在nginx代理后面的生产中时,它不起作用.没有错误.它允许所有请求.

使用ssl的前端服务器是https://frontend.com

使用ssl的后端服务器是https://backend.com

Keycloak代理转发是正确的

前端服务器(9000上的节点服务器)< - > NGINX < - > Keycloak(在8180上运行)

nginx文件样本

upstream keycloak_server {
  server localhost:8180;
}

upstream node_server {
  server localhost:9000;
}

location /auth/ {
  proxy_pass http://keycloak_server;
  proxy_http_version 1.1;
  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;
}  
location / {
  proxy_pass http://node_server;
  proxy_http_version 1.1;
  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;
}
Run Code Online (Sandbox Code Playgroud)

前端服务器使用Angular调用后端api.REST api调用看起来像https://backend.com/callTest

后端服务器(在tomcat上运行)< - > NGINX < - > Spring Boot(带keycloak)

nginx样本 …

jboss nginx spring-boot keycloak nginx-reverse-proxy

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

如何将包含点的任何路径与nginx匹配?

我正在尝试使用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 nginx-reverse-proxy nginx-config

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

如何通过 iframe 仅允许访问我的 Web 应用程序中的 1 个 URL?

NodeJSNGINXWeb 服务器上运行一个应用程序。我可以通过iframe其他网站访问我的应用程序中的所有 URL 。

这是我的NGINXconf:

proxy_hide_header X-Frame-Options;
Run Code Online (Sandbox Code Playgroud)

如何限制 iframe 只允许 1 个 URL 而不是所有 URL?

另外,我如何只允许少数域通过访问iframe

可以NGINX通过NodeJS代码完成还是应该通过代码处理?

iframe nginx node.js nginx-reverse-proxy

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

按需 SSL 证书密钥加载

我们有一个要求,证书密钥只需要加载到 Nginx 内存中。也就是说,将其保存在本地 FS 中不是一个选项。此外,只有在主动查找证书密钥(使用证书向虚拟服务器发出请求)时,我们才需要证书密钥出现在 Nginx 内存中。当没有请求时,证书密钥应从内存中刷新,并通过客户端身份验证(Nginx 作为客户端向 KMS 进行身份验证)按需从 KMS(密钥管理服务器)重新加载。如果您对此类或类似的要求有深入了解,请提供指示。

我在这个 Nginx博客中提到了最佳实践。然而,并非我们的所有要求都得到满足。有几个问题:

  1. ngx_http_ssl_module 是否按需加载证书或在配置解析期间加载证书?一旦加载,无论使用与否,它是否总是保留在内存中?
  2. 是否可以通过子请求按需(即发起SSL握手时)加载证书密钥?

nginx nginx-reverse-proxy

5
推荐指数
0
解决办法
209
查看次数

Nginx 代理管理器无法从另一个 docker 容器提供页面

我正在尝试让 nginx 代理管理器(在 docker 容器中运行)连接到另一个打开了端口 8080 的 docker 容器。当我设置代理连接到192.168.0.29:8080主机的IP地址,但它不起作用时,浏览器只是说该站点没有发送任何数据。

我尝试使用其他服务(不在 docker 容器内运行)设置反向代理,它们工作完美。所以,我得出的结论是,问题出在 docker 容器上。

首先,我尝试用容器的地址(显示在 portainer 中)替换 ip 地址,该地址显示为172.17.0.2. 但是,那没有用。我可以确认两个容器都在同一个网络中bridge

我在这里、Stack Overflow 或其他地方都找不到这个问题的任何解决方案。希望有足够的数据来解决这个问题。提前致谢!

编辑:arp -na从容器内 运行会给出以下输出:

[root@docker-00244f7ab2cc:/app]# arp -na
? (172.17.0.1) at 02:42:d1:fc:fc:6b [ether] on eth0
Run Code Online (Sandbox Code Playgroud)

docker docker-container docker-network nginx-reverse-proxy

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

如何在 nginx 中以有条件的方式将 proxy_protocol 设置为“on”?

有人熟悉 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)

nginx nginx-location nginx-reverse-proxy nginx-config

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

如何在 Nginx 中重定向 ssh 请求?

我在 docker 环境中使用 gitea 版本控制系统。使用的gitea是无根类型的镜像。

\n

http 端口映射为 \xe2\x80\x9c8084:3000\xe2\x80\x9d,ssh 端口映射为 \xe2\x80\x9c2224:2222\xe2\x80\x9d。

\n

我在 Linux 主机上生成了密钥,并将生成的公钥添加到了我的 Gitea 帐户中。

\n

1.测试环境

\n

后来我创建了 ssh 配置文件nano /home/campos/.ssh/config

\n
Host localhost\n  HostName localhost\n  User git\n  Port 2224\n  IdentityFile ~/.ssh/id_rsa\n
Run Code Online (Sandbox Code Playgroud)\n

完成设置后,我创建了 myRepo 存储库并克隆了它。

\n

为了执行克隆,我将 url 从 更改ssh://git@localhost:2224/campos/myRepo.gitgit@localhost:/campos/myRepo.git

\n

要克隆存储库,我输入:git clone git@localhost:/campos/myRepo.git

\n

这很完美!

\n

2.生产环境

\n

但是,在定义反向代理和域名时,无法克隆存储库。

\n

在执行克隆之前,我更改了ssh配置文件:

\n
Host gitea.domain.com\n  HostName gitea.domain.com\n  User git\n  Port 2224\n  IdentityFile ~/.ssh/id_rsa\n
Run Code Online (Sandbox Code Playgroud)\n

然后我再次尝试克隆存储库:

\n

git clone git@gitea.domain.com:/campos/myRepo.git

\n …

nginx nginx-reverse-proxy gitea

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

Nginx 代理管理器服务器的 SSL 可访问性测试失败

我的域名来自domains.google.com. 假设它是mydomainname.com

我将 DNS 设置为我想要的 IP 地址。在我的路由器上,我将端口转发80到我的计算机80443我的计算机的443. 为了确认它是公开可用的,我使用了不同的连接和设备,并且可以mydomainname.com毫无问题地访问。

然后我使用了他们网站docker-compose.yml中描述的文件。

当前latest指向v2.9.18

version: '3'

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    volumes:
      - ./data/:/data
      - ./letsencrypt:/etc/letsencrypt
Run Code Online (Sandbox Code Playgroud)

现在,在 SSL 证书选项卡上,添加 SSL 证书时,测试服务器可访问性始终失败,并出现以下错误:

mydomainname.com: There is no server available at this domain.
Please make sure your domain exists and points to the IP where your NPM
instance is running …
Run Code Online (Sandbox Code Playgroud)

ssl nginx docker-compose lets-encrypt nginx-reverse-proxy

5
推荐指数
0
解决办法
3013
查看次数

将“https://files.mydomain.com/files”重写为“https://files.mydomain.com”

目前,我可以访问: https://files.mydomain.com/files。即使我去https://files.mydomain.com,它也会自动重定向到https://files.mydomain.com/files成功。

相反,我希望 NGINX 自动重写https://files.mydomain.com/files->https://files.mydomain.com

我当前的 NGINX 代码:

http {

    server {
        
            listen       80;
            server_name  localhost;
            return 301 https://$host$request_uri;
    }

    server {

            listen       80;
            server_name  files.mydomain.com;
            location / {
                return 301 https://files.mydomain.com$request_uri;
        }
    }

    server {
            listen 443 ssl http2; 
            listen [::]:443 ssl http2;
            server_name  files.mydomain.com;
            client_max_body_size 0;
            location / {
                return 301 https://$host/files;
            } 
            location /files {
                proxy_pass http://localhost:89;
            }
    }

    #Root Domain
    server {
            listen 443 ssl http2; 
            listen [::]:443 …
Run Code Online (Sandbox Code Playgroud)

nginx nginx-reverse-proxy nginx-config

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

使用nginx反向代理部署K8S时ABP框架HttpApi.Host失败

我已经将ABP框架部署在Kubernetes集群中。

存在以下部署:

  • 雷迪斯
  • MSSql
  • 认证服务器
  • HttpApi.Host
  • Nginx 入口/反向代理带有 https 终止,集群内没有加密。

因此,AuthServer、HttpApi.Host 正在侦听端口 80 / http,而 nginx 正在侦听 https。配置/Helm 值如下:

use-forwarded-headers: "true"
use-proxy-protocol: "true"
use-gzip: "true"
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,部署后我可以进入 Swagger 并授权: 在此输入图像描述

通过检查 AuthServer 日志可以确认这一点:

[19:12:39 INF] CORS policy execution successful.
[19:12:39 INF] The request URI matched a server endpoint: Token.
[19:12:39 INF] The token request was successfully extracted: {
  "grant_type": "authorization_code",
  "code": "[redacted]",
  "client_id": "foobar_Swagger",
  "redirect_uri": "https://api.staging.foobar.io/swagger/oauth2-redirect.html"
}.
[19:12:39 INF] The token request was successfully validated.
Run Code Online (Sandbox Code Playgroud)

但是,现在我想使用 Swagger 来确保与端点的连接正常工作,因此我尝试第一个 GET 端点: 在此输入图像描述

如您所见,有 500 …

kubernetes openiddict nginx-reverse-proxy abp

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