我有一个应用程序使用 HTTP 连接到服务器,但不支持使用 HTTP 代理,我必须使用 HTTP 代理才能访问服务器。
我想设置一个可以通过常规代理服务器的反向代理服务(它在 Linux 服务器上)。
所以:
App --> Reverse Proxy ----------> Forward Proxy -------------> Server
|====Localhost=======| Net |=Somewhere=| Net |=Somewhere Else=|
Run Code Online (Sandbox Code Playgroud)
我看过几个轻量级反向代理,但它们不支持通过代理服务器转发。我不想运行像apache或squid这样的重磅东西,但如果它们是唯一可以工作的东西,它们就会做。(虽然来自 apaches 文档,但它看起来也不行。)
有什么建议?
我添加了与 ProxyPass 和 ProxyPassReverse 条目匹配的服务器,但我在启动时收到“已被其他工作人员使用”[警告] 消息。
我有一个对我来说足够好的建议解决方案,因为它似乎已经清除了消息并且几乎让我忘记了这个问题。此解决方案是在配置文件中以大小写相反的顺序放置条目。
我认为真正的问题与表达式匹配有关,因为如果在“Videos2”之前列出“Videos”,则会出现警告。一旦我撤销了这些条目,警告就停止了。
Nginx 可以作为不接受明文登录的后端服务器的邮件代理吗?
最好我想知道要包含什么指令,以便它调用STARTTLS/ STLS,但通过IMAPS或 进行通信POP3S就足够了。
nginx.conf 的相关(?)部分
mail {
auth_http localhost:80/mailproxy/auth.php;
proxy on;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 SSLv3;
ssl_ciphers HIGH:!ADH:!MD5:@STRENGTH;
ssl_session_cache shared:TLSSL:16m;
ssl_session_timeout 10m;
ssl_certificate /etc/ssl/private/hostname.crt;
ssl_certificate_key /etc/ssl/private/hostname.key;
imap_capabilities "IMAP4rev1" "UIDPLUS";
server {
protocol imap;
listen 143;
starttls on;
}
server {
protocol imap;
listen 993;
ssl on;
}
pop3_capabilities "TOP" "USER";
server {
protocol pop3;
listen 110;
starttls on;
pop3_auth plain;
}
server {
protocol pop3;
listen 995;
ssl on;
pop3_auth …Run Code Online (Sandbox Code Playgroud) 我的问题与How to point a subdomain to local server with dynamic IP 相同。不同之处在于我确实有来自 ISP 的静态 IP,我认为我不需要使用 DynDNS,对吗?那我可以用什么代替呢?
我的目标是将每个子域指向不同的 Web 服务器,如下所示:
mydomain.com --> 192.168.1.100(主 Web 服务器)
sub1.mydomain.com --> 192.168.1.101(Web 服务器 1)
sub2.mydomain.com - -> 192.168.1.102(网络服务器 2)
我曾尝试按照此处的说明使用 Apache 的代理模块,但未成功。当我通过浏览器访问 sub1.mydomain.com 时,它总是导致 mydomain.com。
我可以通过这种方法做到这一点吗?如果没有,请告诉我另一种方式。
我使用 Ubuntu 服务器 12.04
[已解决]
解决方案
A记录指向公网IP:
1@public.ip 2www
public.ip
CNAME记录指向子域:
1 sub1 mydomain.com
2 sub2 mydomain.com
添加sub1和sub2到/etc/apache2/sites-available
子1:
<VirtualHost *:80>
ServerName sub1.mydomain.com
<Proxy *>
Order deny,allow …Run Code Online (Sandbox Code Playgroud) 我们已将Nginx配置为 Apache 服务器群的反向代理,但我遇到了网关超时问题。
我们以人类可读形式的目标是:“在一秒钟内发送请求,但如果确实需要更长的时间,则无论如何都要交付”,对我来说,这意味着“尝试上游的第一个 Apache 服务器最多 500 毫秒。如果我们超时/一个错误,尝试下一个,依此类推,直到我们最终成功。”
现在我们的相关配置是这样的:
location @proxy {
proxy_pass http://apache$request_uri;
proxy_connect_timeout 1s;
proxy_read_timeout 2s;
}
[...]
upstream apache {
server 127.0.0.1:8001 max_fails=1 fail_timeout=10s;
server 10.1.x.x:8001 max_fails=1 fail_timeout=10s backup;
server 10.1.x.x:8001 max_fails=1 fail_timeout=10s backup;
server 10.1.x.x:8001 max_fails=1 fail_timeout=10s backup;
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是 nginx 似乎将其误解为“尝试在一秒钟内从整个上游集群获得响应,如果我们不这样做,则会产生 50X 错误 - 对尝试任何上游服务器的时间没有任何限制”,其中显然不是我们的想法。
有什么办法可以让 nginx 做我们想做的事吗?
我希望将我们的托管环境移动到 Azure,并通过这样做创建了一个沙坑 VM 来解决问题。我们在 IIS 中托管了大约 300-400 个网站,其中大约 2% 的网站拥有唯一的非通配符证书,在我们当前的设置中,所有这些证书都需要唯一的公共 IP。
您能否获得指向 1 个 VM/端点的 IP 范围?或者是否可以创建 SSL 代理?
我从未创建过 SSL 代理,但喜欢它的想法。如果这是最好的选择,我需要在此提供有关如何进行的建议。
抱歉,如果已经回答了!如果我的问题措辞不够雄辩,也很抱歉。
鱿鱼.conf:
http_access allow all
# Squid normally listens to port 3128
http_port 3128 accel defaultsite=localhost no-vhost
cache_peer localhost parent 80 0 no-query originserver name=myAccel
cache_peer_access myAccel allow all
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /usr/local/var/cache/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /usr/local/var/cache/squid
Run Code Online (Sandbox Code Playgroud)
Squid 3.2.9,通过 Homebrew 安装在 OSX 上
localhost: ~ $ squid -v
Squid Cache: Version 3.2.9
configure options: '--disable-debug' '--disable-dependency-tracking' '--prefix=/usr/local/Cellar/squid/3.2.9' '--localstatedir=/usr/local/var' 'CC=cc' 'CXX=c++' 'PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig' …Run Code Online (Sandbox Code Playgroud) 对于我的一个项目,我需要连接一长串机器,这些机器实质上是相互代理 HTTP 请求。它是这样的:
网络客户端 - A - B/C - D
当浏览器发出请求时,它首先通过一个位于用户本地机器上的薄 PHP 代理层,其目的是解决跨域请求等复杂问题。它代理到机器 B - 只是一个 nginx 实例,它将 URL 和代理重写到 C。C 在代理到 D 之前进行一些必要的修改,获取响应,并将其返回给 Web 客户端。D 是一个无法触及的远程服务 API。
我在机器 C 上设置会话 cookie 时遇到问题,一直到原始请求。尽管可以设置 cookie,但是当有新请求时,它在 Chrome 网络检查器中不可见,并且当我尝试从显然不存在的 cookie 中获取值时,节点 C 返回空指针异常。
我想,这归结为调整 nginx 代理请求的方式。
我有几个运行 Atlassian Tomcat 应用程序的子域(jira.example.com、confluence.example.com、stash.example.com),我想知道是否可以basic_auth使用.htpasswd.
Nginx 在没有 basic_auth 指令的情况下工作正常,但是如果我尝试在nginx.conf...
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# Load config files from the /etc/nginx/conf.d directory
include /etc/nginx/conf.d/*.conf;
# Our self-signed cert
ssl_certificate /etc/ssl/certs/fissl.crt;
ssl_certificate_key /etc/ssl/private/fissl.key;
# Password …Run Code Online (Sandbox Code Playgroud) 对我来说,这似乎是一个简单的场景:
X( http://proxy.example.com)发出反向代理请求X将请求转发到后端服务器Y( http://internal1.example.com:8000)Y响应3xx重定向到另一个后端服务器Z( http://internal2.example.com:8000)X 拦截3xx 重定向并再次向后端服务器发出请求Z。它不会将 3xx 重定向返回给客户端。X用来自后端服务器的重定向请求的结果响应客户端Z。我需要这个,因为有些客户端似乎不处理重定向(尤其是在执行 PUT 时),所以我希望重定向在代理服务器上以不可见的方式在内部发生。(我实际上在后端运行 WebDAV 服务器,所以我的客户端是 Cyberduck、Nautilus、OSX Finder 等)。
我已经搜索了大量的现有答案,但没有运气(这个问题基本上是我想要的,但没有令人满意的答案,并且它已经一年不活动了。希望从那时起事情就发生了变化)。
如果可能,我想为此使用现有的解决方案。Apache/Nginx 有可能吗?
reverse-proxy ×10
nginx ×4
apache-2.2 ×3
proxy ×3
azure ×1
cache ×1
confluence ×1
cookies ×1
http ×1
jira ×1
redirect ×1
squid ×1
subdomain ×1
timeout ×1
tomcat ×1
ubuntu-12.04 ×1