标签: reverse-proxy

代理节点请求到新端口并像反向代理一样

我需要创建一个代理从端口A到端口B的请求的应用程序.例如,如果用户在端口3000上连接,他将被路由(在引擎盖下)到端口3001,因此"原始"应用程序将在端口3001上运行但在客户端(浏览器)中,用户将输入端口3000.不重定向...

http://example.com:3000/foo/bar

将创建一个侦听端口3001的新服务器,所有呼叫实际上都是使用新服务器和新端口运行的端口3000.由于端口3000实际被占用,我的反向代理应用程序?我该怎么测试呢......

有没有办法测试这个以验证这是否有效,例如通过单元测试?

我发现这个模块https://github.com/nodejitsu/node-http-proxy可能会有所帮助.

javascript reverse-proxy node.js express node-http-proxy

17
推荐指数
1
解决办法
570
查看次数

如何通过http代理传递所有Python的流量?

我想通过一个http代理服务器传递所有Python的流量,我检查了urlib2并请求包,例如,它们可以配置为使用代理但是我如何使用类似于Python的系统范围代理来代理所有数据?

python proxy reverse-proxy python-2.7

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

Heroku的Nginx反向代理失败了SSL握手

不幸的是,我不是一个系统管理员并且遇到了一个让我头撞墙的问题.

简短的故事是我在EC2(Ubuntu 14.04.4 LTS)上运行Nginx,以(a)托管我公司的营销网站(https://example.com,顺便提一下是Wordpress)和(b)作为反向运行对于某些路径,在Heroku(https:// app.example.com)上运行的Rails应用程序的代理.我们对example.com和app.example.com使用相同的SSL证书.所有这些都运行了8-10个月,但我最近从Heroku的付费SSL插件切换到新的免费SSL产品,现在我们的反向代理被打破了.

在检查Nginx错误日志时,我看到以下内容:

SSL_do_handshake()失败(SSL:错误:14094438:SSL例程:SSL3_READ_BYTES:tlsv1警报内部错误:SSL警报号80)当SSL握手到上游时,客户端:ipaddress1,server:example.com,请求:"GET/proxiedpath/proxiedpage HTTP/1.1",上游:"https:// ipaddress2:443/proxiedpath/proxiedpage",主持人:"example.com"

我试图寻找一些额外的指导 - 我已经升级了Nginx(1.10.1)和OpenSSL(1.0.2h)而没有运气.我怀疑这个问题可能是由于Heroku在新的免费SSL功能(https://devcenter.heroku.com/articles/ssl-beta)中使用了SNI ,但是无法确定为什么这可能是个问题.

关于这一点我的探索还有几点:

  • 当我切换到新的免费Heroku SSL时,我按照文档的指示将app.example.com DNS记录更改为指向app.example.com.herokudns.com.该应用程序可以通过app.example.com正常访问,当我在app.example.com和app.example.com.herokudns.com上运行nslookup时,我得到了相同的IP地址.然而...

  • 我无法通过nslookup或app.example.com.herokudns.com返回的IP地址访问应用程序.我怀疑这是正常的和预期的,但不知道到底为什么会这样.和...

  • nslookup返回的IP地址与上面日志错误消息("ipaddress2")中引用的IP地址不同.事实上,"ipaddress2"在整个日志中并不一致 - 它似乎经常变化.我再也不知道我不知道什么......在Heroku的一边负载平衡?

最后,我的Nginx反向代理在nginx.conf中配置如下:

http {

    client_max_body_size 500M;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    server_names_hash_bucket_size 64;

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

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";

    server {

        listen 443 default_server;
        server_name example.com;

        root /usr/share/nginx/html;
        index index.php index.html index.htm;

        ssl on;
        ssl_certificate mycompanycert.crt;
        ssl_certificate_key mycompanykey.key;

        ssl_session_timeout 5m;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers …
Run Code Online (Sandbox Code Playgroud)

ssl configuration reverse-proxy nginx heroku

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

PHP是2017年获得真实用户IP地址的最准确/最安全的方式

通过PHP获取用户IP地址的最准确方法是什么?

我已经阅读了很多关于它的SO问题和答案,但大多数答案都是陈旧的,用户评论说这些方法是不安全的.

例如,看看这个问题(2011):如何在PHP中获取客户端IP地址?

蒂姆肯尼迪的回答包含一个建议,使用如下:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
Run Code Online (Sandbox Code Playgroud)

但正如我已经阅读了很多,我已经看到使用X_FORWARDED_FOR是不安全的,因为下面的评论强调:

除非您完全了解它的作用,否则请勿使用上述代码!由于这个原因,我已经看到了MASSIVE安全漏洞.客户端可以将X-Forwarded-For或Client-IP标头设置为它想要的任意值.除非您有可信的反向代理,否则不应使用任何这些值.

由于我完全不知道它的作用,我不想承担风险.他说它不安全,但没有提供一种安全的方法来获取用户的IP地址.

我试过这个简单的$_SERVER['REMOTE_ADDR'];,但这会返回错误的IP.我已经测试了这个,我的真实IP遵循这种模式:78.57.xxx.xxx但我得到的IP地址如下:81.7.xxx.xxx

所以你有什么想法吗?

php security ip proxy reverse-proxy

17
推荐指数
4
解决办法
7581
查看次数

如何通过https设置TeamCity以进行公共访问?

如何设置TeamCity 4.0以便我可以通过互联网上的端口443访问它?例如https://teamcity.mydomain.com

我在安装TeamCity的同一台服务器上运行IIS 7.我看到两个选择:

  1. 将TeamCity设置为使用端口8443并在IIS中创建反向代理,将反向代理路由到TeamCity公共IP地址到内部IP地址上的Tomcat端口.

  2. 将Tomcat设置为在与IIS 7不同的IP地址上运行,并将TeamCity配置为在端口443上运行.

我不确定这两个步骤的细节.

teamcity tomcat reverse-proxy

16
推荐指数
1
解决办法
8776
查看次数

反向代理背后的GWT问题 - 无论是nginx还是apache

当它在反向代理后面时,我遇到了这个问题.后端应用程序部署在上下文中 - 让我们称之为/上下文.

当我直接点击它时,GWT应用程序正常工作:

HTTP://主机:8080 /上下文/

我可以在它前面配置一个反向代理.这是我的nginx示例:

upstream backend {
    server 127.0.0.1:8080;
}

...

location / {
   proxy_pass        http://backend/context/;
}

但是,当我通过反向代理时,GWT感到困惑,说:

2009-10-04 14:05:41.140:/:WARN:  Login: ERROR: The serialization policy file '/C7F5ECA5E3C10B453290DE47D3BE0F0E.gwt.rpc' was not found; did you forget to include it in this deployment?
2009-10-04 14:05:41.140:/:WARN:  Login: WARNING: Failed to get the SerializationPolicy 'C7F5ECA5E3C10B453290DE47D3BE0F0E' for module 'https://hostname:444/'; a legacy, 1.3.3 compatible, serialization policy will be used.  You may experience SerializationExceptions as a result.
2009-10-04 14:05:41.292:/:WARN:  StoryService: ERROR: The serialization policy file '/0445C2D48AEF2FB8CB70C4D4A7849D88.gwt.rpc' …

gwt reverse-proxy

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

ProxyPassMatch与ProxyPassReverse

伙计们,我们正在尝试为以下场景设置Apache反向代理:

  • 传入请求采用表单 http://foo.com/APP/v1/main.html
  • 对于某些服务器,URL将引用差异版本,例如, http://foo.com/APP/v2/main.html
  • 上游负载均衡器(HAProxy)将请求发送到正确的服务器,该服务器将具有面向JBoss服务器的Apache2反向代理.
  • 当请求出现在Apache 2时,它将具有请求路径 /APP/v1/main.html
  • 我们希望它(反向)代理出去http://localhost:8080/AppContext/main.html,不论在URL版本片段(V1,V2等).

我一直试图这样做:

ProxyPassMatch ^/.*?/APP.*?/(.*)$ http://localhost:8080/AppContext/$1
ProxyPassReverse /APP http://localhost:8080/AppContext
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 我使用ProxyPassMatch正确吗?
  2. ProxyPassReverse是"静态的".如何让它意识到之后可能变化的东西/APP

感谢您的任何见解.

-Raj

apache reverse-proxy proxypass

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

SELinux启用时,proxy_pass无法正常工作,为什么?

我正在使用端口8080上的端口8081和Nginx监听应用程序.代理传递语句如下所示:

$ cat /var/etc/opt/lj/output/services/abc.servicemanager.conf

location /api/abc.servicemanager/1.0 { proxy_pass     http://localhost:8081;}
Run Code Online (Sandbox Code Playgroud)

nginx.conf,我将此文件包含为:

include /etc/nginx/conf.d/services/*.conf;
Run Code Online (Sandbox Code Playgroud)

/etc/nginx/conf.d/service是一个符号链接:

# ll /etc/nginx/conf.d/

lrwxrwxrwx. 1 root root   39 Dec 10 00:19 services -> ../../../var/etc/opt/lj/output/services
Run Code Online (Sandbox Code Playgroud)

这是一个CentOS 7.0 SELinux Enabled系统.如果我setenforce 0,并使它Permissive,我没有看到任何问题.所以文件在正确的位置,路径没有问题.如果SELinux正在执行,我在审计日志中看到以下内容:

type=AVC msg=audit(1418348761.372:100930): avc:  denied  { getattr } for  pid=3936 comm="nginx" path="/var/etc/opt/lj/output/services/abc.servicemanager.conf" dev="xvda1" ino=11063393 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=file
Run Code Online (Sandbox Code Playgroud)

我想知道如何启用Nginx来查找conf文件而无需禁用SELinux.

reverse-proxy nginx selinux

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

如何在Nginx代理服务器中启用CORS?

作为我的标题,这是位于conf.d/api-server.conf中的配置文件

server {
  listen 80;
  server_name api.localhost;

  location / {
    add_header 'Access-Control-Allow-Origin' 'http://api.localhost';
    add_header 'Access-Control-Allow_Credentials' 'true';
    add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
    add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

    if ($request_method = 'OPTIONS') {
      add_header 'Access-Control-Max-Age' 1728000;
      add_header 'Content-Type' 'text/plain charset=UTF-8';
      add_header 'Content-Length' 0;
      return 204;
    }

    proxy_redirect off;
    proxy_set_header host $host;
    proxy_set_header X-real-ip $remote_addr;
    proxy_set_header X-forward-for $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:3000;
  }
}
Run Code Online (Sandbox Code Playgroud)

nginx.conf文件与默认文件保持一致.

在我向api.localhost(api.localhost/admin/login)发送请求后,我仍然收到405错误:

XMLHttpRequest cannot load http://api.localhost/admin/login. Response 
to preflight request doesn't pass access control check: No 'Access-
Control-Allow-Origin' header is present on the requested resource. …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy nginx node.js cors

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

Apache和Tomcat:ProxyPass和ProxyPassReverse

我遇到了配置Apache和Tomcat的麻烦,这就是场景:

我有一个Apache Web Server,运行正常,我可以访问这个只需键入:

http://localhost
Run Code Online (Sandbox Code Playgroud)

此外,在这台主机中,我有一个Tomcat运行并正常工作; 我创建了一个迷你网络应用程序,文件在"prueba"目录中,我可以访问输入:

http://localhost:8080/prueba
Run Code Online (Sandbox Code Playgroud)

(我知道Apache在80端口运行,而Tomcat在8080运行)

我想要做的是通过Apache用户可以访问'pruebas'(在Tomcat上运行),我的意思是:

http://localhost/prueba
Run Code Online (Sandbox Code Playgroud)

我已经知道了很多这个,我认为有两种方法可以做到这一点,我已经决定启用代理模块(proxy和proxy_ajp,带有a2enmod),我也已经知道我必须编辑这个文件: sites-available/default,这是内容:

NameVirtualHost *:80
<VirtualHost *:80>
     ServerName 127.0.0.1
     DocumentRoot /var/www

     ProxyRequests Off
     ProxyPreserveHost On

     ProxyPass /static/ !
     ProxyPass / ajp://localhost:8009/
     ProxyPassReverse / ajp://localhost:8009/

.
.
.
     Alias /static/ "/apache/www/"

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

但这没有正常工作:(

我不得不说,我尝试了很多改变,在这两行上,如:

     ProxyPass /prueba ajp://localhost:8009/prueba
     ProxyPassReverse /prueba ajp://localhost:8009/prueba
Run Code Online (Sandbox Code Playgroud)

要么

     ProxyPass / ajp://localhost:8009/prueba
     ProxyPassReverse / ajp://localhost:8009/prueba
Run Code Online (Sandbox Code Playgroud)

(每次我编辑文件,我都重启apache)

但是当我访问[http:// localhost/prueba /]时,我有:服务暂时不可用

有谁知道为什么?先谢谢你们.

Pd:我正在使用apache 2.2.17和tomcat6.

proxy reverse-proxy apache2 ajp tomcat6

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