标签: reverse-proxy

为什么使用 nginx 作为反向代理会破坏本地链接?

我刚刚将 nginx 设置为反向代理,因此从该框提供的某些站点由它直接提供服务,而其他站点则转发到 Node.js 服务器。

然而,由 Node.js 提供服务的站点显示时没有 CSS 或图像,所以我认为链接以某种方式被破坏了,但不知道为什么。

以下是 /etc/nginx/sites-enabled 中唯一的文件:

server {

    listen   80; ## listen for ipv4
    listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name  dev.my.site;

    access_log  /var/log/nginx/localhost.access.log;

    location / {
            root   /var/www;
            index  index.html index.htm;
    }

    location /myNodeSite {
            proxy_pass http://127.0.0.1:8080/;
            proxy_redirect off;
            proxy_set_header Host $host;
    }
}
Run Code Online (Sandbox Code Playgroud)

我原以为它可能是因为第一次进入而试图在 /var/www 中找到它们,但删除它似乎没有帮助。

nginx reverse-proxy node.js

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

Nginx - 当隧道 url 在没有端口号的情况下重定向时

我的问题与此非常相似:nginx proxy pass redirects ignore port

我正在使用 nginx 1.0.14。

我希望能够通过 ssh 隧道进入我的 Django 网站,以便我可以远程工作。我在我的个人电脑上测试了一个简单的 Django 项目,使用非常简单的 nginx 配置(启动器,默认)。我隧道和重定向返回端口号作为 url 的一部分。所以我确定这不是 Django 问题。主要是我的nginx配置。

这是相关的部分。

server {
    listen 80;
    server_name localhost 127.0.0.1;
    server_name_in_redirect off;

# location other services go here

location ~ /forum/(.*)$ {
    #rewrite ^(.*):(.*)/forum(.*)$ /$2 last;
    #rewrite ^(.*)$ http://localhost:8000/$1;
    #rewrite ^/forum(.*)$ $1 break;

    # the forum service runs as local, listens to 8000 port...
    proxy_pass http://localhost:8000;
    proxy_redirect default;

    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)

那么如果我 …

nginx reverse-proxy ssh-tunnel django

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

当所有后端服务器都在 Apache 后面运行 HAProxy 时,获取 502 而不是 503

我正在测试运行 HAProxy 作为 Apache 2.2 后面的专用负载均衡器,替换我们当前使用 Apache 负载均衡器的配置。在我们当前的 Apache 设置中,如果所有后端(源)服务器都关闭,Apache 将提供 503 服务不可用消息。使用 HAProxy,我得到 502 错误的网关响应。

我在 Apache 中使用了一个简单的反向代理重写规则

RewriteRule ^/(.*) http://127.0.0.1:8000/$1 [last,proxy]
Run Code Online (Sandbox Code Playgroud)

在 HAProxy 我有以下(在默认 tcp 模式下运行)

defaults
    log             global
    option          tcp-smart-accept
    timeout connect 7s
    timeout client  60s
    timeout queue   120s
    timeout server  60s

listen my_server 127.0.0.1:8000
    balance leastconn
    server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
    server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
Run Code Online (Sandbox Code Playgroud)

在后端服务器关闭时测试直接连接到负载均衡器:

[root@dev ~]# wget http://127.0.0.1:8000/ test.html
--2012-05-28 11:45:28--  http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy load-balancing haproxy apache-2.2

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

配置 nginx 将外部端口转发到同一内部端口

我正在运行 TileMill,它正在从本地主机监听端口 20008 和 20009。我希望 20009 只能通过端口 80 上的 nginx 访问(使用简单的身份验证)。我希望 20008 可以从外部“直接”访问。

server {
   listen 80;
   server_name localhost;
   location / {
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:20009;
        auth_basic "Restricted";
        auth_basic_user_file htpasswd;
    }
}
server {
   listen 20008;
   server_name localhost;
   location / {
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:20008;
    }
}
Run Code Online (Sandbox Code Playgroud)

明显的问题是 nginx 无法侦听端口 20008 - 它已被 TileMill 使用。

Restarting nginx: nginx: [emerg] bind() to 0.0.0.0:20008 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:20008 failed (98: Address already in …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy port-forwarding

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

无法配置 apache 以限制通过 IP 访问代理

我在 httpd.conf 中添加了以下内容(在 VirtualHost 之后):

<VirtualHost *:80>
    ServerName XXX.XXX.XXX

    <Directory proxy:>
        Order allow,deny
        Allow from 10.52.208.221
        Allow from 10.52.208.223
        Deny from all
    </Directory>

    ProxyPass / http://XXX.XXX.XXX/

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/admin/$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

但是,我可以从其他 IP 访问我的 VirtualHost:

# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.4 (Santiago)
# uname -a
Linux XXXXX.XXXXX.XXX 2.6.32-358.18.1.el6.x86_64 #1 SMP Fri Aug 2 17:04:38 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux
# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built:   Aug  2 …
Run Code Online (Sandbox Code Playgroud)

proxy reverse-proxy mod-proxy apache-2.2

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

具有 Spring Security 的站点的 Apache 反向代理设置

我有一个 Spring MVC 应用程序,它使用 Spring Security 进行登录。我使用 Apache Webserver 作为代理和 Tomcat。下面是我的 /etc/apache2/sites-enabled/example.com.conf 文件:

ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html

ProxyPreserveHost On
ProxyRequests off

ProxyPass /myapp/j_spring_security_check http://XX.YY.ZZ.WW:8080/myapp/j_spring_security_check
ProxyPassReverse /myapp/j_spring_security_check http://XX.YY.ZZ.WW:8080/myapp/j_spring_security_check

ProxyPass /myapp http://XX.YY.ZZ.WW:8080/myapp
ProxyPassReverse /myapp http://XX.YY.ZZ.WW:8080/myapp
Run Code Online (Sandbox Code Playgroud)

我的问题是现在我必须访问我的网站:

www.example.com/myapp

我想在哪里访问它

www.example.com

我尝试使用它,但随后登录无法正常工作。我应该如何为此设置 ProxyPass 和 ProxyPassReverse?

tomcat reverse-proxy proxypass springframework apache-2.2

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

代理传递时如何让NGINX读取静态文件目录

这是我的nginx配置:

server {
        listen 80;
        server_name example.com;
        location /assets {
                root /var/www/frappe/sites/assets;
                try_files $uri $uri/ =404;
        }
        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;

                proxy_pass http://127.0.0.1:8000;
                proxy_redirect off;
        }

}
Run Code Online (Sandbox Code Playgroud)

我希望 /assets 目录由 NGINX 处理,而其他所有内容都由运行在 8000 上的 python 服务器处理。但是,我仍然在资产目录上得到 404。

我究竟做错了什么?资产目录可由 www-data 读取。

nginx reverse-proxy

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

Nginx 作为反向代理不缓存

我正在尝试将 Nginx 配置为缓存反向代理。源服务器是 Apache,它托管一个 WordPress 实例,如果这很重要的话。

反向代理功能按预期工作,但缓存似乎不起作用。如果我连续两次获得相同的静态资源,我就会获得x-proxy-cache: MISS两次。

assodigitale.it 是域,138.201.87.123 是源服务器 IP 地址,138.201.87.124 是 Nginx 代理 IP 地址。

源服务器似乎回复允许代理缓存资源:

$ curl --connect-to ::138.201.87.123:443 --http2 -I https://assodigitale.it/wp-content/uploads/2018/03/aereo.jpg
HTTP/2 200 
date: Sun, 11 Mar 2018 20:59:39 GMT
server: Apache/2.4.25 (Debian)
content-length: 32989
strict-transport-security: max-age=31536000; includeSubdomains; preload
last-modified: Wed, 07 Mar 2018 09:34:41 GMT
etag: "80dd-566cf44ca2952"
accept-ranges: bytes
vary: Accept-Encoding
cache-control: max-age=1209600, public
x-content-type-options: nosniff
content-type: image/jpeg
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,对代理服务器的第一个请求会导致 MISS:

$ curl --connect-to ::138.201.87.124:443 --http2 -I https://assodigitale.it/wp-content/uploads/2018/03/aereo.jpg
HTTP/2 200 
server: nginx/1.13.9
date: …
Run Code Online (Sandbox Code Playgroud)

nginx cache reverse-proxy

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

nginx反向代理后面的Keycloak空白页

在解压并启动 keycloak 以侦听 127.0.0.1 后,我将 nginx 配置为可通过 https 从公共可用域访问的反向代理。

这是nginx配置:

http
{
    server_tokens off;

    upstream keycloak { ip_hash; server 127.0.0.1:8080; }

    server
    {   
        server_name name.domain.tld;
        listen 443 ssl http2; # managed by Certbot
        ssl_certificate /path/to/cert; # managed by Certbot
        ssl_certificate_key /path/to/key; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

        location /
        {   
            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;
            add_header Access-Control-Allow-Origin *;
            proxy_pass http://keycloak;
        }
    }


    server …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy single-sign-on mixed-content

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

使用 nginx 修改响应头

我正在尝试将 nginx 配置为后端 Domino 服务器上的 Web 应用程序的反向代理服务器。我们有 99.9% 的工作,但最后 0.1% 真的让我烦恼。

我来解释一下。在某些情况下,应用程序返回部分刷新,并带有一个名为 的特殊响应标头X-XspLocation。如果存在,则它包含要由客户端重定向到的 url。它是 XPage 环境生成和使用的标头,我的代码本身不会设置或读取它。那么它的值是:

http://localhost:81/database.nsf/page.xsp/ThankYou
Run Code Online (Sandbox Code Playgroud)

我希望它就是这样:/ThankYou

我尝试了一百万种方法,但似乎不可能改变它的价值。只要我使用proxy_hide_header X-XspLocation;没有新的标题就可以使用add_header! 如果我忽略隐藏,我会在标题中得到双倍值,所以我知道我的替换值是正确的。这是我最近失败的尝试:

map $sent_http_x_xsplocation $xsplocation_new {
    "~http://localhost:81/database.nsf/page.xsp/(.*)" "/$1";
}
server {
    ...
    location / {
      proxy_pass   http://localhost:81/database.nsf/page.xsp/;
      # redirect X-XspLocation
      proxy_hide_header X-XspLocation;
      add_header X-XspLocation $xsplocation_new;
      #add_header X-XspLocation2 $xsplocation_new;
    }
}
Run Code Online (Sandbox Code Playgroud)

我什至尝试用 njs 来更改标题,它可能失败了,因为我不知道如何使用 js_set 或 js_content 来调用一个不返回任何内容的函数。

为什么修改响应头这么难?

真正的问题当然是:我怎样才能做到这一点?谢谢你的协助!!

更多信息

为了证明该地图有效,我进行了以下测试:

    location / {
      proxy_pass   http://localhost:81/database.nsf/page.xsp/;
      # redirect X-XspLocation
      # proxy_hide_header X-XspLocation;
      # add_header X-XspLocation …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy ibm-domino

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