抱歉,到目前为止,我主要使用 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 配置为反向代理。 - 您没有提到您正在使用哪个发行版,但通常
en2mod
和dis2mod
命令是创建/etc/apache2/mods-available
和之间的符号链接的快捷方式/etc/apache2/mods-enabled
。后一个目录中的文件包含在主配置文件中。 - mod_remoteip如果你的 Apache2 服务器收到来自另一个反向代理的请求。这不是你的情况:你的 Apache2发送向上游服务器发送请求。在这种情况下,您需要查看代理添加头信息指令'在'默认情况下。
编辑:您似乎混淆了正向和反向代理的概念:
如果你希望客户端通过你的 Apache2 服务器请求任何 URL(例如使用你的服务器访问
http://google.com
),你需要一个转发代理。如果你希望你的服务器透明地将请求转发到一组预配置的服务器,你需要一个反向代理基本上,反向代理将有限的一组其他服务器的内容镜像为其自己的内容。