标签: reverse-proxy

Django + Caddy = CSRF 保护问题

我在 Docker 容器中部署了带有 Daphne (ASGI) 的 Django 4 应用程序。我前面使用Caddy作为反向代理。它有效,但我无法填写任何表格,因为 CSRF 保护启动。例如,没有管理员登录。

我目前可以通过两种方式访问​​管理界面:

  1. 直接通过 docker,通过 SSH 调谐端口
  2. 通过 Caddy,然后转发到 Docker 容器。

选项 1 有效。我可以登录管理界面,就像在本地运行开发服务器一样。一切都按预期进行。

但是,选项 2(caddy 反向代理)不起作用。我可以访问 Django 并加载页面,但任何表单提交都将被阻止,因为 CSRF 保护启动。

CSRF verification failed. Request aborted.

Reason given for failure:
    Origin checking failed - https://<mydomain.com> does not match any trusted origins.
Run Code Online (Sandbox Code Playgroud)

我的 Caddyfile 包含以下内容:

<mydomain.com> {
       reverse_proxy localhost:8088
}
Run Code Online (Sandbox Code Playgroud)

localhost:8088 是我的 docker 容器公开的端口。

为了消除潜在问题,我在配置文件中将以下内容设置为 false:

  • SECURE_SSL_REDIRECT(导致重定向循环,可能与反向代理有关)
  • SESSION_COOKIE_SECURE(我宁愿将其设置为 True,但目前我不知道)
  • CSRF_COOKIE_SECURE(同样的评论)

我在网上能找到的唯一 Django-Caddy 示例已经过时,并且引用的是旧版本的 Caddy 和/或 Django。Django 与 Daphne 一起部署在 …

python django reverse-proxy docker caddy

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

使用mod_proxy反向代理,保留原始请求URL

我使用mod_proxy(Apache2)监听127.0.0.1:80配置了一个反向代理,它将所有请求代理到127.0.0.1:8080

所以我已经配置了mod_proxy:

ProxyPreserveHost On
ProxyRequests Off
ProxyPass /foo http://127.0.0.1:8080
ProxyPassReverse /foo http://127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)

当我请求时http://127.0.0.1/foo/bar,侦听127.0.0.1:8080的应用程序从mod_proxy获取以下请求URL:

http://127.0.0.1/bar

相反,我想保留原始请求,并得到:

http://127.0.0.1/foo/bar

我怎样才能做到这一点?

apache reverse-proxy mod-proxy

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

Nginx反向代理SSL /缩小

我试图使用NginX作为几个IIS服务器的反向代理.目标是让NginX从IIS/Apache服务器进入缓存静态项目,如CSS/JS/Images.我也试图让NginX使用perl模块自动缩小js/css文件.

我在这里找到了一个缩小的示例脚本:

http://petermolnar.eu/linux-tech-coding/nginx-perl-minify-css-js/

使用脚本一切正常,除了反向代理中断.

问题:

  1. 我正在努力实现甚至可能吗?我希望NginX在将脚本保存到缓存之前首先缩小脚本.
  2. NginX可以自动设置正确的expires头,以便尽可能长时间地缓存静态项,并且仅在更改查询字符串时替换(jquery.js?timestamp = march-2012)
  3. NginX可以在发送之前GZIP资源.
  4. 如果无法连接到后端服务器,NGinx可以转发请求或提供"Down For Maintenance"页面.

任何帮助将不胜感激.

到目前为止,这是我的网站启用/默认.

    server {


    location / {

        proxy_pass             http://mywebsite.com;
        proxy_set_header       Host $host;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating
                              http_500 http_502 http_503 http_504;
    }


    location @minify {
                    perl Minify::minify_handler;
            }

            location ~ \.css$ {
                    try_files $uri.min.css @minify;
            }




            location /*.js {
                 expires 30d;
            }



}
Run Code Online (Sandbox Code Playgroud)

iis-7 reverse-proxy nginx minify

4
推荐指数
1
解决办法
5002
查看次数

Nginx add_header和缓存控制

在nginx中使用add_header指令时,标头将添加到来自源服务器的响应中.

假设源服务器返回cache-control public,max-age = 60.但是在nginx反向代理位置,您可以设置如下:

add_header cache-control public,max-age = 10

这究竟是做什么的?我可以想到两种不同的场景:

1)Nginx尊重来自源服务器的缓存控制头,并将内容存储在其缓存中,有效期为60秒.然后使用覆盖的标头传递响应,导致客户端将资源存储在其缓存中,到期时间为10秒.

要么..

2)Nginx首先覆盖响应头,然后解释它们.它以10秒的有效期存储资源,并将响应传递给客户端,客户端也将其缓存,有效期为10秒.

caching reverse-proxy nginx cache-control

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

反向代理背后的WordPress:未在Safari和IE中设置会话cookie

我有一个WordPress博客在反向代理(Apache)后面运行.

httpd.vhosts.conf:

<VirtualHost  *:80>
    ServerName blog.domain.com:80
    ServerAlias www.blog.domain.com
    ProxyPass / http://192.168.101.11/blog/
    ProxyPassReverse / http://192.168.101.11/blog/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

该博客工作正常,我可以登录作为管理员,但是当试图保存设置或删除插件(和wp_redirect发生),我重定向到登录页面,因为WordPress的显然没有找到/接受会话cookie,以及该行动未完成.

因此,我添加了这一行:

    ProxyPassReverseCookiePath / http://192.168.101.11/blog/
Run Code Online (Sandbox Code Playgroud)

(请参阅Apache代理cookie仅适用于第一个应用程序)

这似乎解决了这个问题.但是,我现在注意到,使用此设置,登录根本不起作用,但仅限于Safari和IE(在Opera,Firefox,Chrome中工作得很好).我只是再次被重定向到登录页面.

一些其他信息:

  • 会话cookie和wordpress_test_cookie管理部分根本不是在Safari中创建的,只是类似的"__uc*"等等(对于博客本身).如果没有ProxyPassReverseCookiePath-entry,他们正在创建的.
  • 我为第三方网站(在两个浏览器中)激活了cookie,但这并没有解决问题.
  • 我用这种方式配置了WP-cookies:

WP-config.php文件

define('COOKIE_DOMAIN', '.blog.domain.com');
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');
define('ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' );
Run Code Online (Sandbox Code Playgroud)

apache safari wordpress reverse-proxy session-cookies

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

如何配置Nginx在404处理之前尝试两个上游?

给定一个大致像这样的Nginx配置:

upstream A {
    server aa:8080;
}

upstream B {
    server bb:8080;
}

server {
  listen 80;

  location @backendA {
    proxy_pass http://A/;
  }

  location @backendB {
    proxy_pass http://B/;
  }

  location / {
    # This doesn't work. :)
    try_files @backendA @backendB =404;
  }
}
Run Code Online (Sandbox Code Playgroud)

基本上,我希望Nginx尝试上游A,如果A返回404,则尝试上游B,如果失败,则将404返回给客户端。try_files对文件系统位置执行此操作,然后可以回退到命名位置,但不适用于多个命名位置。有什么起作用的吗?

背景:我有一个Django Web应用程序(A上游)和一个Apache / Wordpress实例(B上游),我想在同一URL命名空间中共存,以获得更简单的Wordpress URL:mysite.com/hello-world/而不是mysite.com/blog/hello-world/

可以在Nginx位置复制我的Django URL,并使用wordpress作为一个包罗万象的东西:

location /something-django-handles/ {
  proxy_pass http://A/;
}

location /something-else-django-handles/ {
  proxy_pass http://A/;
}

location / {
  proxy_pass http://B/;
} …
Run Code Online (Sandbox Code Playgroud)

configuration reverse-proxy nginx

4
推荐指数
1
解决办法
1082
查看次数

docker和jwilder/nginx-proxy http/https问题

我在osx上使用docker via boot2docker.

我有2个主机:site1.loc.test.comsite2.loc.test.com指向docker host的ip地址.

两者都应该通过80443端口可用.

所以我jwilder/nginx-proxy用于反向代理目的.

但事实上,当我docker-compose每次尝试通过80端口打开时,我都会运行所有这些,我会重定向到443 (301 Moved Permanently).

可能是我错过了一些jwilder/nginx-proxy配置?

泊坞窗,compose.yml

proxy:
  image: jwilder/nginx-proxy
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    - certs:/etc/nginx/certs
  ports:
    - "80:80"
    - "443:443"

site1:
  image: httpd:2.4
  volumes:
    - site1:/usr/local/apache2/htdocs
  environment:
    VIRTUAL_HOST: site1.loc.test.com
  expose:
    - "80"

site2:
  image: httpd:2.4
  volumes:
    - site2:/usr/local/apache2/htdocs
  environment:
    VIRTUAL_HOST: site2.loc.test.com
  expose:
    - "80"
Run Code Online (Sandbox Code Playgroud)

https reverse-proxy docker docker-compose jwilder-nginx-proxy

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

Nginx SSL证书SSL失败:错误:0B080074:x509(Google Cloud)

我的服务器托管在Bluehost(Apache)中,证书工作正常.现在,我正在使用Google Cloud在NodeJS上的多个页面上使用proxy_pass.我正在尝试配置SSL,但我遇到了问题.我正在寻找类似的问题,但它仍然显示相同的错误.我在此链接后创建了密钥文件

/var/log/nginx/error.log:

2015/07/08 10:47:20 [emerg] 2950#0:SL_CTX_use_PrivateKey_file("/ etc/nginx/ssl/domain_com/domain_com.key")失败(SSL:错误:0B080074:x509证书例程:X509_check_private_key:键值不匹配)

当我戴上控制台时:

openssl rsa -noout -modulus -in domain_com.key告诉我这个:

Modulus=D484DD1......512 characters in total......5A8F3DEF999005F
Run Code Online (Sandbox Code Playgroud)

openssl x509 -noout -modulus -in ssl-bundle.crt:

Modulus=B1E3B0A.......512 characters in total......AFC79424BE139
Run Code Online (Sandbox Code Playgroud)

这是我的Nginx设置:

server {
    listen 443;
    server_name www.domain.com;

    ssl_certificate /etc/nginx/ssl/domain_com/ssl-bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/domain_com/domain_com.key;

    ssl on;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

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

    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;
       proxy_pass                               http://localhost:8086;
       proxy_read_timeout …
Run Code Online (Sandbox Code Playgroud)

ssl reverse-proxy nginx google-compute-engine google-cloud-platform

4
推荐指数
1
解决办法
6923
查看次数

Gitlab背后是ngnix和https - >不安全或不良网关

我在我的ngnix后面运行gitlab.

服务器1(反向代理):启用了https的Ngnix,以及/ git的配置:

location ^~ /git/ {
    proxy_pass                          http://134.103.176.101:80;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Ssl on;
}
Run Code Online (Sandbox Code Playgroud)

如果我不改变我的gitlab设置上的任何内容,这将有效但由于外部http请求不安全,如:

'http://www.gravatar.com/avatar/c1ca2b6e2cd20fda9d215fe429335e0e?s=120&d=identicon'. This content should also be served over HTTPS.
Run Code Online (Sandbox Code Playgroud)

所以,如果我更改隐藏服务器2(http gitlab)上的gitlab配置:

external_url 'https://myurl'
nginx['listen_https'] = false
Run Code Online (Sandbox Code Playgroud)

正如文件中所述.我将得到一个错误的网关错误502.没有加载页面.

我能做什么 ?


编辑:通过设置黑客攻击:

gitlab_rails['gravatar_plain_url'] = 'https://www.gravatar.com/avatar/%{hash}?s=%{size}&d=identicon'
Run Code Online (Sandbox Code Playgroud)

https ...这工作但不是一个干净的解决方案.(克隆网址仍然是http://)

ssl https reverse-proxy nginx gitlab

4
推荐指数
1
解决办法
1642
查看次数

如何在443中为Apache AND节点配置https支持?

实际状态:

http://www.example.com/mypage apache http:好的!
https://www.example.com/mypage apache https:好!

http://www.example.com:8000 节点http:好!
https://www.example.com:8000 节点https:不起作用(仍然)

我试图将节点程序修改为

var express = require('express');
var app = express();
var https = require('https');
var fs = require('fs');

var server = http.createServer(app);

https.createServer({ 
        key: fs.readFileSync("/etc/letsencrypt/live/www.example.com/privkey.pem"),
        cert: fs.readFileSync("/etc/letsencrypt/live/www.example.com/fullchain.pem"),
        ca: fs.readFileSync("/etc/letsencrypt/live/www.example.com/chain.pem")
}, app).listen(443);
Run Code Online (Sandbox Code Playgroud)

这里的明显问题是apache已经侦听端口443,然后

Error: listen EADDRINUSE :::443
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使用Apache 443为节点提供SSL服务?

apache ssl https reverse-proxy node.js

4
推荐指数
1
解决办法
1607
查看次数