我需要创建一个代理从端口A到端口B的请求的应用程序.例如,如果用户在端口3000上连接,他将被路由(在引擎盖下)到端口3001,因此"原始"应用程序将在端口3001上运行但在客户端(浏览器)中,用户将输入端口3000.不重定向...
http://example.com:3000/foo/bar
将创建一个侦听端口3001的新服务器,所有呼叫实际上都是使用新服务器和新端口运行的端口3000.由于端口3000实际被占用,我的反向代理应用程序?我该怎么测试呢......
有没有办法测试这个以验证这是否有效,例如通过单元测试?
我发现这个模块https://github.com/nodejitsu/node-http-proxy可能会有所帮助.
我想通过一个http代理服务器传递所有Python的流量,我检查了urlib2并请求包,例如,它们可以配置为使用代理但是我如何使用类似于Python的系统范围代理来代理所有数据?
不幸的是,我不是一个系统管理员并且遇到了一个让我头撞墙的问题.
简短的故事是我在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) 通过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
所以你有什么想法吗?
如何设置TeamCity 4.0以便我可以通过互联网上的端口443访问它?例如https://teamcity.mydomain.com
我在安装TeamCity的同一台服务器上运行IIS 7.我看到两个选择:
将TeamCity设置为使用端口8443并在IIS中创建反向代理,将反向代理路由到TeamCity公共IP地址到内部IP地址上的Tomcat端口.
将Tomcat设置为在与IIS 7不同的IP地址上运行,并将TeamCity配置为在端口443上运行.
我不确定这两个步骤的细节.
当它在反向代理后面时,我遇到了这个问题.后端应用程序部署在上下文中 - 让我们称之为/上下文.
当我直接点击它时,GWT应用程序正常工作:
我可以在它前面配置一个反向代理.这是我的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' …
伙计们,我们正在尝试为以下场景设置Apache反向代理:
http://foo.com/APP/v1/main.html
http://foo.com/APP/v2/main.html
/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)
我的问题是:
ProxyPassMatch
正确吗?ProxyPassReverse
是"静态的".如何让它意识到之后可能变化的东西/APP
?感谢您的任何见解.
-Raj
我正在使用端口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.
作为我的标题,这是位于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) 我遇到了配置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.