Назад | Перейти на главную страницу

Apache ProxyPassReverse и https

Я хотел бы отобразить весь трафик на 80 и 443 с foo.com на внутренний сервер: 192.168.1.101. У меня установлен VirtualHost (Apache 2.2 на Ubuntu) следующим образом (обратите внимание, мне пришлось разбить гиперссылки ниже, потому что я «новый пользователь»):

<VirtualHost *:80>
  ServerName foo.com
  ServerAlias *.foo.com
  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://192.168.1.101/
  ProxyPassReverse / http://192.168.1.101/
</VirtualHost>

И это отлично работает для HTTP-трафика. Однако я не могу сделать то же самое для https. Я пытался:

Я поискал здесь и в других местах, и ближайший вопрос, который я смог найти, был этот, но это не совсем ответ.

Кроме того, просто из любопытства я попытался сопоставить все порты с https (изменив две строки ProxyPass с http на https (и удалив: 80 из VH), и это тоже не сработало. Как бы вы это сделали? ?

Есть предположения? Заранее спасибо.

Раньше это работало для меня

<VirtualHost *:443>                                                                                                                                                                        
 ServerName domaine.com
 SSLProxyEngine on                                                                                                                                                                          
 <Location />                                                                                                                                                                               
 ProxyPass https://www.something.com/                                                                                                                                                           
 ProxyPassReverse https://www.something.com/                                                                                                                                                    
 </Location>                                                                                                                                                                                
</VirtualHost>

Для меня работает следующее:

<VirtualHost A.B.C.D:443>
    ...

    ProxyPass / https://192.168.1.101/
    ProxyPass / https://192.168.1.101/
</VirtualHost>

(Куда A.B.C.D это ваш публичный IP-адрес, очевидно)

Я бы лично полностью пропустил Apache и использовал IPTABLES для перенаправления всего трафика на 80 и 443 на требуемый IP, я бы предположил, что это даст большую производительность.

(Предполагается, что у вас есть доступ на машине для редактирования правил брандмауэра).

$iptables -A PREROUTING -t nat -i $EXTIF -p tcp --dport 80 -j DNAT --to 192.168.1.101:80
$iptables -A FORWARD -p tcp -m state --state NEW -d 192.168.1.101 --dport 80 -j ACCEPT

краткое упражнение из моего брандмауэра, где я делаю именно то, что вы пытаетесь сделать.

Если вы хотите, чтобы весь запрос был перенаправлен в защищенную сеть, то есть. через https добавьте следующее:

<VirtualHost *:443>
  ServerName ngmlx441
  SSLEngine on
  KeepAliveEnabled ON
  SSLCipherSuite HIGH:MEDIUM
  SSLProtocol all
  SSLProxyEngine on
  SecureProxy ON
  SSLProxyEngine on
  SSLCertificateFile /etc/httpd/conf.d/servername.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/servername.key
  SSLCACertificateFile /etc/httpd/conf.d/orgination.crt
</VirtualHost>