如何安全地使用apache2代理多个网站?

如何安全地使用apache2代理多个网站?

抱歉,到目前为止,我主要使用 NGINX。我想使用 apache 2(在主机上)将 https 和 http 流量转发到在 VirtualBox VM 上运行的几个网站。每个 VM 都有多个网站或应用程序,流量都很少(主要是机器人),位于 nginx 服务器/反向代理上或后面。我的路由器只允许主机使用几个端口(80、8080、443),主机防火墙也仅限于几个应用程序(例如,当前是 VirtualBox)。我宁愿不打开 80(80) 和 443 以外的更多端口。

我怎样才能安全地做到这一点?原则上,这个想法是在以下,但这够了吗?我应该发出命令行命令吗?(如何)可以让它更安全吗?是否需要其他指令?

httpd.conf:

<IfDefine SERVER_APP_HAS_DEFAULT_PORTS>
    Listen 8080
</IfDefine>
<IfDefine !SERVER_APP_HAS_DEFAULT_PORTS>
    Listen 80
</IfDefine>

LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
LoadModule authn_file_module libexec/apache2/mod_authn_file.so
LoadModule authn_core_module libexec/apache2/mod_authn_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache2/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache2/mod_authz_user.so
LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule access_compat_module libexec/apache2/mod_access_compat.so
LoadModule auth_basic_module libexec/apache2/mod_auth_basic.so
LoadModule reqtimeout_module libexec/apache2/mod_reqtimeout.so
LoadModule filter_module libexec/apache2/mod_filter.so
LoadModule mime_module libexec/apache2/mod_mime.so
LoadModule log_config_module libexec/apache2/mod_log_config.so
LoadModule env_module libexec/apache2/mod_env.so
LoadModule headers_module libexec/apache2/mod_headers.so
LoadModule setenvif_module libexec/apache2/mod_setenvif.so
LoadModule version_module libexec/apache2/mod_version.so
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
LoadModule slotmem_shm_module libexec/apache2/mod_slotmem_shm.so
LoadModule unixd_module libexec/apache2/mod_unixd.so
LoadModule status_module libexec/apache2/mod_status.so
LoadModule autoindex_module libexec/apache2/mod_autoindex.so
<IfModule !mpm_prefork_module>
    #LoadModule cgid_module libexec/apache2/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
    #LoadModule cgi_module libexec/apache2/mod_cgi.so
</IfModule>
LoadModule negotiation_module libexec/apache2/mod_negotiation.so
LoadModule dir_module libexec/apache2/mod_dir.so
LoadModule alias_module libexec/apache2/mod_alias.so
LoadModule hfs_apple_module libexec/apache2/mod_hfs_apple.so

<IfModule unixd_module>
User _www
Group _www

</IfModule>

ServerAdmin [email protected]

ServerName localhost

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<FilesMatch "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
    Require all denied
</FilesMatch>

<Files "rsrc">
    Require all denied
</Files>
<DirectoryMatch ".*\.\.namedfork">
    Require all denied
</DirectoryMatch>

ErrorLog "/private/var/log/apache2/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "/private/var/log/apache2/access_log" common

</IfModule>

<IfModule alias_module>
    ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) "/Library/WebServer/CGI-Executables/$1"

</IfModule>

<IfModule cgid_module>
    #Scriptsock cgisock
</IfModule>

<IfModule headers_module>
    RequestHeader unset Proxy early
</IfModule>

<IfModule mime_module>
    TypesConfig /private/etc/apache2/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

</IfModule>


TraceEnable off

Include /private/etc/apache2/extra/httpd-mpm.conf

Include /private/etc/apache2/extra/httpd-vhosts.conf

<IfModule proxy_html_module>
Include /private/etc/apache2/extra/proxy-html.conf
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

Include /private/etc/apache2/other/*.conf

extra/httpd-vhosts.conf

ProxyRequests Off

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass        "/" "http://localhost:8082/"
    ProxyPassReverse "/" "http://localhost:8082/"
    ServerName abc.de
</VirtualHost>

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass        "/" "http://localhost:8081/"
    ProxyPassReverse "/" "http://localhost:8081/"
    ServerName fgh.ij
</VirtualHost>

我还读到我需要使用 LoadModule 语句(在 OSX 上)启用 apache2 模块:哪些对于安全正向代理是必要的?

我想我也想利用这个:https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html从文档来看,代理(互联网、机器人)客户端似乎无法被 Web 服务器识别,因为它们被识别为代理服务器。当然,我的网站需要知道谁在访问。

答案1

您的配置基本看起来没问题:

  • 由于您没有将 Apache 用作转发代理(您没有该ProxyRequests指令),因此您无需担心代理访问权限。您的 Apache 配置为反向代理
  • 您没有提到您正在使用哪个发行版,但通常en2moddis2mod命令是创建/etc/apache2/mods-available和之间的符号链接的快捷方式/etc/apache2/mods-enabled。后一个目录中的文件包含在主配置文件中。
  • mod_remoteip如果你的 Apache2 服务器收到来自另一个反向代理的请求。这不是你的情况:你的 Apache2发送向上游服务器发送请求。在这种情况下,您需要查看代理添加头信息指令'在'默认情况下。

编辑:您似乎混淆了正向和反向代理的概念:

  • 如果你希望客户端通过你的 Apache2 服务器请求任何 URL(例如使用你的服务器访问http://google.com),你需要一个转发代理

  • 如果你希望你的服务器透明地将请求转发到一组预配置的服务器,你需要一个反向代理基本上,反向代理将有限的一组其他服务器的内容镜像为其自己的内容。

相关内容