Прозрачный прокси squid для конкретного домена, обычный прокси для других, тот же порт? - PullRequest
0 голосов
/ 18 января 2019

У меня есть прокси Squid, работающий на IP 10.x.y.z: 3128. Конфигурация ниже. Он корректно работает в браузерах, настроенных для доступа к нему.

Теперь мне нужно, чтобы конкретный сервер (ServerA) имел возможность доступа к определенному внешнему домену (www.example2.com) с использованием прокси-сервера, но без использования прокси-сервера для каких-либо других запросов ... Я не могу используйте любые прокси-скрипты или выполните дополнительную настройку на этом сервере.

Я уже пытался использовать redirect_program для этого конкретного домена (показано ниже).

Я настроил следующую запись в файле hosts ServerA:

10.x.y.z        www.example.com

Я ожидал, что каждый раз, когда приложение на ServerA будет нуждаться в связи с www.example.com, оно будет проходить через прокси. И тогда программа перенаправления перепишет запрос на www.example2.com.

Но вместо этого я получаю:

Invalid URL

Some aspect of the requested URL is incorrect.

Some possible problems are:

•Missing or incorrect access protocol (should be “http://” or similar)
•Missing hostname
•Illegal double-escape in the URL-Path
•Illegal character in hostname; underscores are not allowed.

Your cache administrator is root.

Что я делаю не так?

Вот /etc/squid/squid.conf

#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
acl allow_whitelist dstdomain .windows.net
acl allow_whitelist dstdomain .cloudapp.net



# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
#http_access allow localhost
http_access allow allow_whitelist

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

dns_nameservers 8.8.8.8 8.8.4.4


redirect_program /usr/local/bin/redirect_test.pl

Вот /usr/local/bin/redirect_test.pl

#!/usr/bin/perl
use strict;

# Turn off buffering to STDOUT
$| = 1;

# Read from STDIN
while (<>) {

    my @elems = split; # splits $_ on whitespace by default

    # The URL is the first whitespace-separated element.
    my $url = $elems[0];

    # Handle local IP links and translate them to https://hooks.slack.com
    # with the rest of the URL intact (if present) and ignore warnings.
    # 192.168.1.220:3128
    if ($url =~ m#^http://www\.example\.com:3128(/.*)?#i) {

        $url = "https://www.example2.com${1}";

        print "$url\n";

    }

    else {

        # Unmodified URL
        print "$url\n";

    }
}
...