截至 2 天前,nginx 开始支持 websocket 连接,因此我试图让我的 nginx-nodejs-socket.io 应用程序在没有 HAproxy 等的情况下工作(虽然运气不好)。
我真正想要实现的是 nginx 仅将 websocket 连接请求发送到支持的服务器,或者更准确地说是 websocket 服务器,socket.io,同时 nginx 将提供 php 文件,以及包括 html 文件在内的所有静态内容.我根本不想 express 提供静态内容(如果可能的话)。
这是我的 nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip …Run Code Online (Sandbox Code Playgroud) 我正在查看来自我们一些中国客户的流量,他们的 X-Forwarded-For 看起来像:
REALIP, 127.0.0.1, REALIP, etc
Run Code Online (Sandbox Code Playgroud)
有趣的是,环回 IP 始终是列表中的第二个 IP 地址。这意味着连接来自工作站 -> 代理 -> 同一主机上的代理 -> 另一个代理。
这意味着流量正在某处本地机器上通过代理。
这是防火长城吗?我一直认为这将是一个透明的代理。还有什么?有没有人见过这个?
谢谢。
我有一台 Linux Debian 机器,有许多运行 Squid 的网络接口(venet0:1 到 venet0:5)。如果我连接到接口 venet0:2,squid 使用 venet0:0 进行传出流量,但我希望 Squid 使用相同的网络接口进行连接。因此,如果我连接到 venet0:1 的 IP 地址,代理也应该使用相同的接口进行传出流量。
目前我使用以下配置:
http_port 200
forwarded_for off
uri_whitespace encode
visible_hostname localhost
via off
collapsed_forwarding on
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users
auth_param basic children 5
auth_param basic realm Proxy
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl ncsa_users proxy_auth REQUIRED
access_log none
cache_store_log none
cache_log /dev/null
acl all src all
http_access allow ncsa_users
header_access From deny all
header_access Referer deny all …Run Code Online (Sandbox Code Playgroud) 从特定域名为 docker 容器提供服务的“最佳实践”是什么?
例如:
然后你可以,例如:
但哪个更好?是否有其他首选选项,还是真的取决于个人喜好?
选项 1 符合单一职责原则,允许您在容器中运行您的 1 个应用程序,并让主机处理代理。它还允许 Nginx 处理 SSL,但除了“docker run”之外还需要额外的设置和配置。
我知道我可以使用 ssh 隧道在我的机器上创建一个“代理”,这样我就可以让本地生成的所有流量通过远程服务器。像这样:
$ ssh -D 12345 myuser@remote_ssh_server
Run Code Online (Sandbox Code Playgroud)
但是如果我需要在远程服务器上创建一个“代理”,以便我发送的所有流量都将通过我的本地机器呢?这可以通过 ssh 实现吗?
本质上,我想使用我的本地互联网连接和一些特定命令来远程运行,因为服务器无法直接访问互联网。
我们有 QA 版本、UAT 版本和 webapp 的 DEV 版本。用户需要通过访问这些http://uat.company.com:41002/webapp,http://qa.company.com:41002/webapp和http://dev.company.com:41002/webapp。在端口 41001 和端口 8080 上还有一个不同的 webapp,它们需要访问。
这些 url 必须在公司外部可用,而且我们只有一个可以访问它们的公共 IP 地址。因此,DNS 记录需要所有 3 个地址指向一个 IP。在那个单一的 IP 地址上,有一台服务器运行着 nginx。在后台,我需要每个 url 指向不同的服务器
http://uat.company.com --> 123.123.123.1
http://qa.company.com --> 123.123.123.2
http://dev.company.com --> 123.123.123.3
Run Code Online (Sandbox Code Playgroud)
恐怕我不知道正确的术语,但是 URI 的其余部分和端口也必须转移到 IP 地址。即如果有人访问
http://uat.company.com:41002/webapp/somepage`
Run Code Online (Sandbox Code Playgroud)
看起来好像那是他们访问过的页面,但实际上他们会查看
http://123.123.123.1:41002/webapp/somepage
Run Code Online (Sandbox Code Playgroud)
或者如果他们访问过
http://qa.company.com:8080/static/home.html
Run Code Online (Sandbox Code Playgroud)
他们真的会看
http://123.123.123.2:8080/static/home.html
Run Code Online (Sandbox Code Playgroud)
但他们的浏览器仍然会说 http://qa.company.com:8080/static/home.html
我试过了
server {
server_name uat.company.com;
listen 41001;
listen 41002;
listen 8080;
location / {
proxy_pass http://123.123.123.1:$server_port$uri;
proxy_set_header Host $host;
}
Run Code Online (Sandbox Code Playgroud)
}
但是,这给了我一个带有日志的错误网关 502 页面: …
我在 Debian 上使用 Squid 3.4,我想知道如何在禁止其他子 URL 的同时允许某些子 URL。
特别是,我想禁止访问 reddit.com/* 但允许访问 reddit.com/r/foo/* 和 reddit.com/r/foo/
acl bad url_regex reddit\.com.*
acl good url_regex reddit\.com.*foo*
http_access deny bad
http_access allow good
...
http_access allow localnet
http_access allow localhost
http_access deny all
Run Code Online (Sandbox Code Playgroud)
这段代码似乎不起作用,reddit.com 上的所有内容最终都被屏蔽了。我怎样才能得到我想要的配置?
编辑:更新的配置仍然不起作用:
acl good url_regex http(s)?://(www\.)?reddit\.com/r/foo.*
acl bad url_regex http(s)?://(www\.)?reddit\.com.*
http_access allow good
http_access deny bad
...
http_access allow localnet
http_access allow localhost
http_access deny all
Run Code Online (Sandbox Code Playgroud)
这与前面的代码有相反的效果;它允许访问所有 reddit.com(我不想要)。
我需要设置一个连接到我们中央 Active Directory 服务器的本地 LDAP 代理缓存。OpenLDAP 代理缓存看起来很像。但是尽可能地遵循联机帮助页,我无法使其正常工作。
我能够通过 localhost 将请求代理到远程服务器,但它们没有被缓存(或者至少没有检索到缓存)。
我做的步骤:
openldap-servers和openldap-clients打包slapd.conf配置文件(详细信息如下)slapd -d -1命令启动服务器ldapwhoami -vvv -h localhost -D "CN=Melka Martin,OU=(...),DC=int,DC=ourdomain,DC=com" -x -w <password>结果是成功。但是嗅探网络流量显示查询是从中央 LDAP 服务器汇集的。
该slapd输出是非常详细,但它确实在一个点状态
QUERY NOT ANSWERABLE
QUERY CACHEABLE
Run Code Online (Sandbox Code Playgroud)
唉,如果它确实被缓存了,它永远不会被回答。任何想法可能是错误的?
"cn=admin,dc=int,dc=ourdomain,dc=com"是远程 LDAP 服务器中管理员用户的 DN。<something>是他的密码。
配置文件
database ldap
suffix "dc=int,dc=ourdomain,dc=com"
rootdn "cn=admin,dc=int,dc=ourdomain,dc=com"
rootpw <something>
uri ldap://dc-04.int.ourdomain.com:389
overlay pcache
pcache hdb 100000 1 1000 100
pcacheAttrset 0 …Run Code Online (Sandbox Code Playgroud) 我住在土耳其,是一个计划建立基于 WiFi 的 ISP 来为我的家乡服务的小组的成员,因为我们相信以无线方式连接所有离我们市中心不近的子村庄会更容易。在我们研究该项目所需设备的过程中,我们已经阅读了缓存代理服务器,该服务器存储来自经常访问的网站的数据,以便可以从缓存代理服务器下载内容,而不是通过我们的回程传输到互联网并消费那个带宽。
我们预计我们的用户将大量贩卖流行的社交网站,如 Facebook 和 Twitter,以及数据和视频内容农场、网上银行网站和许多其他使用https. 从我读过的关于这个主题的所有信息来看,我们将无法缓存这些内容,所以我觉得也许我们应该放弃使用缓存代理服务器的搜索。
在我们的例子中,考虑到我们预计大部分流量都会结束,考虑使用缓存代理服务器是否有意义https?使用这项技术,我们能否在回程中节省大量带宽?
我是网络新手,所以我是第一次尝试。我创建了一个连接到 VPN 服务器的 openvpn docker。在 docker 容器内运行wget -q -O - https://api.myip.com可确认 docker 的网络已正确连接到 VPN 并且 IP 属于 VPN 服务器。现在我想尝试通过docker容器路由主机流量,并在主机流量使用docker的VPN连接的容器外部实现相同的结果。我不太清楚如何从 docker 主机 <-> 容器关系中做到这一点,所以我想也许我可以利用 docker 中的端口映射功能,并在 docker 中建立一个 Web 代理来处理任何 http/https要求。
因此,我在同一个 docker 中建立了鱿鱼和 openvpn 服务器并公开了端口 3128(因为这是鱿鱼正在侦听的端口)。主机上的 wget 命令变为:
wget -q -O - https://api.myip.com -e use_proxy=yes -e http_proxy=localhost:12345
但测试表明流量没有通过 docker 的 VPN 连接。相反,结果显示通信是通过主机的互联网连接进行的。
我使用以下 Docker run 命令运行容器:
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun --name vpn -it --sysctl net.ipv6.conf.all.disable_ipv6=0 -p 12345:3128 vpn-image
Run Code Online (Sandbox Code Playgroud)
上面的做法有错吗?通过多个 docker vpn 连接路由主机流量的最佳方法是什么?
以下资源表明这是可能的,但提供了特定于其用例的解决方案。如果有一个像 wget 或 …