Перенаправление Apache 2.4.7 не работает при наличии нескольких тегов виртуального хоста Ubuntu14.04

У меня есть 2 тега виртуального хоста в моем файле conf.

1-й тег содержит правило перенаправления для запроса, поступающего через внутренний IP-адрес.

Второй тег содержит другие правила перенаправления для запроса, поступающего через общедоступный IP-адрес или любое другое место.

Когда я удаляю первый тег VirtualHost, перенаправление и ssl работают нормально, но мне также нужен первый тег VirtualHost

Мой файл conf

это находится в /etc/apache2/sites-available/site.conf

<VirtualHost 10.1.0.7:80>
    ProxyPreserveHost On
    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ServerName servername.com
    ProxyPass /Service http://localhost:8080/Service
    ProxyPassReverse /Service http://localhost:8080/Service
</VirtualHost>
<VirtualHost *:80>
    ProxyPreserveHost On
    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ServerName servername.com
    RewriteEngine On    # Turn on the rewriting engine
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] 
</VirtualHost>

Если я удалю первый тег VirtualHost, содержащий частный IP-адрес, все будет работать нормально, но как только я его добавлю, сервер не будет перенаправлять на порт 443.

Мой файл ssl conf:

находится в /etc/apache2/sites-available/site-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/html
    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
     ProxyPreserveHost On
        ServerName server.com
    # Redirections:
    ProxyPass /server-status http://localhost:7570/server-status
    ProxyPassReverse /server-status http://localhost:7570/server-status

    ProxyPass /mCare/subscribe ws://localhost:8080/mCare/subscribe
    ProxyPassReverse /mCare/subscribe ws://localhost:8080/mCare/subscribe

    ProxyPass /mCare http://localhost:8080/mCare
    ProxyPassReverse /mCare http://localhost:8080/mCare

    ProxyPass /solr http://localhost:8280/solr
    ProxyPassReverse /solr http://localhost:8280/solr

    SSLEngine on
            SSLCertificateFile      /mnt/opt/ssl/2015/sha2/b89516b0cdc9a701.crt
            SSLCertificateKeyFile   /mnt/opt/ssl/2015/sha2/mcare.pem
            SSLCertificateChainFile /mnt/opt/ssl/2015/sha2/gd_bundle.crt

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
            nokeepalive ssl-unclean-shutdown \
            downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>

Это мой файл ports.conf:

Listen 80

<IfModule ssl_module>
      Listen 443
</IfModule>

Я также создал все необходимые софт-ссылки.


person Abid    schedule 08.01.2016    source источник


Ответы (1)


Наконец-то я заработал.

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

Я просто отказался от тега виртуального хоста с внутренним IP-адресом сервера и сумел написать лучшее регулярное выражение в RewriteRule.

<VirtualHost *:80>
    ProxyPreserveHost On

    ProxyPass /Service http://localhost:8080/Service
    ProxyPassReverse /Service http://localhost:8080/Service





    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


    ServerName server.com

    RewriteEngine On    # Turn on the rewriting engine
    RewriteCond %{HTTPS} !=on

    RewriteRule ^((?!/Service).)*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

</VirtualHost>

Итак, теперь мой файл /etc/apache2/sites-available/site.conf содержит только один виртуальный тег.

Я написал выражение так, чтобы все запросы, содержащие Service, не перенаправляли на https, и для этого я также дал proxyPass.

Это решило мою проблему

Если у кого-то есть лучшее решение, мы также приветствуем ваши ответы

person Abid    schedule 14.01.2016