我使用 NGINX 服务器作为其他一些 NGINX 服务器的 ssl 代理。不幸的是,如果请求被上游服务器重定向,则位置字段包含错误的目标端口。
curl -v "https://example.com/site":
> GET /site HTTP/2
> Host: example.com
> User-Agent: curl/7.58.0
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 301
< server: nginx
< date: Sun, 18 Mar 2018 20:01:44 GMT
< content-type: text/html
< content-length: 178
< location: http://example.com:9101/site/
< strict-transport-security: max-age=15768000; includeSubDomains
Run Code Online (Sandbox Code Playgroud)
NGINX 代理:
# Proxy: example.com
####################
server {
listen 0.0.0.0:80;
listen [::]:80;
server_name example.com;
root /srv/www/_empty;
location / { return 301 https://example.com$request_uri; …Run Code Online (Sandbox Code Playgroud) 我有一个带有私有 IP 的私有 kubernetes 集群。为了访问它,我设置了一个带有鱿鱼代理的堡垒主机。它看起来像这样:
My host -> bastion -> private cloud
Run Code Online (Sandbox Code Playgroud)
常规 kubectl 命令可以按预期抛出代理:
$ HTTPS_PROXY=socks5://127.0.0.1:1080 kubectl get pods
No resources found.
Run Code Online (Sandbox Code Playgroud)
问题是当尝试 ssh 到 pod 时:
$ HTTPS_PROXY=socks5://127.0.0.1:1080 kubectl exec -it "some-pod" -- /bin/bash
error: error sending request: Post https://<master-ip>/api/v1/namespaces/ns/pods/some-pod/exec?command=%2Fbin%2Fbash&container=xxx&container=xxx&stdin=true&stdout=true&tty=true: EOF
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
来自维基百科上的代理服务器:
\n\n\n代理服务器可以驻留在用户的本地计算机上,或者位于用户计算机和 Internet 上的目标服务器之间的任意点。传递未修改的请求和响应的代理服务器通常称为网关,有时也称为隧道代理。转发代理是面向 Internet 的代理,用于从各种来源(大多数情况下是 Internet 上的任何位置)检索数据。反向代理通常是面向内部的代理,用作前端来控制和保护对专用网络上服务器的访问。反向代理通常还执行负载平衡、身份验证、解密和缓存等任务。
\n
来自David Gourley 和 Brian Totty 的HTTP:权威指南:
\n\n严格来说,代理连接两个或多个使用相同协议的应用程序,而网关则连接两个或多个使用不同协议的应用程序。网关充当\xe2\x80\x9c协议转换器,\xe2\x80\x9d\n允许客户端完成与服务器的事务,即使客户端和服务器使用不同的协议。
\n图 6-2 说明了代理和网关之间的区别:
\n\n
\n- \n
图 6-2a 中的中间设备是 HTTP 代理,因为代理与客户端和服务器都使用 HTTP 协议。
\n- \n
图 6-2b 中的中间设备是 HTTP/POP 网关,\n因为它将 HTTP 前端与 POP 电子邮件后端联系在一起。网关\n将 Web 事务转换为适当的 POP 事务,\n以允许用户通过 HTTP 读取电子邮件。基于网络的电子邮件程序\n例如 Yahoo! Mail 和 MSN Hotmail 是 HTTP 电子邮件网关。
\n实际上,代理和网关之间的区别很模糊。\n由于浏览器和服务器实现不同版本的 HTTP,\n代理通常会执行一定量的协议转换。商业代理服务器实现网关功能以支持 SSL 安全协议、SOCKS 防火墙、FTP 访问和基于 Web …
我正在尝试使用 OAuth2 服务器(授权代码流)对 NGINX 请求进行身份验证,该服务器会将客户端重定向到登录页面。是否可以使用 auth_request 指令来实现这一点?这是我的 nginx.conf:
server {
listen ${NGINX_PORT};
proxy_send_timeout 600;
proxy_connect_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
client_max_body_size 100m;
absolute_redirect off;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
location / {
auth_request /authn;
gzip_static on;
index index.html;
root /usr/share/nginx/html;
try_files $uri $uri/ @index;
}
location @index {
root /usr/share/nginx/html;
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
expires 0;
try_files /index.html =404;
}
location /api {
set $target http://gateway:8030/api;
proxy_pass http://gateway:8030/api;
}
location /authn {
set $target http://gateway:8030/authn;
proxy_pass http://gateway:8030/authn; …Run Code Online (Sandbox Code Playgroud) 我在 CentOS 7.8 上使用 Apache 2.4.43 以及 Varnish 6 和 PHP-FPM 来为 Magento 2 网站提供服务。
Varnish 侦听端口 80。Apache 侦听 8080 以向 Varnish 提供内容,并且还侦听端口 443,该端口将 HTTPS 请求代理到 Varnish,如下所示:
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:80/
RequestHeader set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"
Run Code Online (Sandbox Code Playgroud)
这适用于大多数请求,但偶尔(约 10% 的请求)我会收到来自 Varnish 和 Apache 的 503 响应。我在 Apache 日志中看到的唯一错误是:
[proxy_http:error] [pid 6719:tid 140054596265728] (70008)Partial results are valid but processing is incomplete: [client x.x.x.x:53760] AH01110: error reading response, referer: http://example.com
Run Code Online (Sandbox Code Playgroud)
如果我重试该请求,它通常会立即起作用,尽管有时我必须刷新几次才能满足请求。我注意到,当发出大批量请求时(即包含数百个外部资源的页面),这种情况会更频繁地发生。我还注意到,这种情况似乎发生在较大的文件上,而不是较小的文件上。
我猜测这可能是某种超时,但我不确定要调整哪些值或如何进一步调试它。
我尝试过的事情包括以下内容:
在阅读了一些有关 TPROXY 的内容(例如在https://www.kernel.org/doc/html/latest/networking/tproxy.html)后,我现在有更多的问题然后得到答案。我实际上什至不知道 TPROXY 应该做什么......
关于我应该做什么以及内部发生的事情的一些假设。
你能纠正以下假设吗?
据我了解,这些是您应该运行的命令(尽管我不知道为什么):
iptables -t mangle -N DIVERT:
DIVERT已创建。mangle因为您将要做的事情比重定向、阻止和 NAT 更重要。iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT:
PREROUTING链确保一旦 TCP 数据包从网络设备传递到内核,首先发生的事情就是将其发送到链DIVERT。-p tcp确保非 TCP 流量不会出现这种情况。-m socket确保创建和关闭连接的数据包不会出现这种情况(例如SYN/ACK)-p tcp -m socketTPROXY 将影响所有 IP(v4) 数据包。这将是一个不同但有效的设置。iptables -t mangle -A DIVERT -j MARK --set-mark 1:
1。您可以选择其他号码。iptables -t mangle …我需要更新 100 多个运行 ubuntu 的工作站。
问题是我希望他们从本地服务器下载包,这样他们就不会使用太多的互联网带宽。
我为此使用了一种缓存代理,它只下载一次特定的包,然后将其分发到所有工作站。
我们在 Centos5.3 上使用squid 3.0,目前有 20 个用户(Internet Explorer)使用这个代理。问题是通过代理访问速度较慢。即使是像 google.com(.au) 这样的简单网页,也比没有代理的直接连接要长 5 秒。看起来大约有 2-5 秒的延迟。禁用 google.com(.au) 的缓存没有帮助。明确定义 dns_nameservers 没有区别。
服务器参数 : Dual-Core AMD Opteron(tm) Processor 2220, 6GB memory, 60gb SCSI hdd
cache_mem 256 MB
cache_dir ufs /usr/local/squid/var/cache 30000 16 256
maximum_object_size_in_memory 256 KB
minimum_object_size 0 KB(0 - 200 KB - 不是真正的区别,延迟仍然存在)
maximum_object_size 32 MB
您将如何根据服务器规范更改 squid.conf 中的这些规范。什么会导致延迟?同样对于像 yahoo.com.au 这样的更大的网页,有没有办法从缓存中接收页面的一部分,然后是其余的(图像最后)。目前 15 秒内没有任何内容,然后会出现整个网页。
如何通过鱿鱼阻止特定 IP 的网站?
请给出示例或配置文件的解决方案。
我将机器的全局设置设置为使用自动代理配置脚本。例如http://autoproxy.mycompanydomain.exe:8080,但仍有一些网络应用程序需要明确的代理设置。我认为这是因为这些应用程序不知道如何访问全局代理设置。如何查看自动配置的全局代理设置,以便我可以将它们复制到这些麻烦的应用程序的设置中?