到目前为止,我已经用Apache 2.2系列+ OpenSSL构建了一个可以与Tomcat一起使用的Web服务器,但是需要将Apache更改为2.4系列+ OpenSSL 1.1.0,所以我主要研究了Apache配置文件。我是。
什么不能做
Apache Lounge 二进制文件使用 VisualStudio2017 编译。要使用它,请提前安装 VC15 的 C++ 可再发行包。您可以从上面的 Apache Lounge 链接下载它
启用 mod_proxy 并转发到具有代理功能的 tomcat。
关于Apache和Tomcat的连接协议,一般使用mod_proxy_ajp或者mod_jk,但是这次使用的是mod_proxy_http。2
- # 以下の#を除去してモジュールを有効にします。
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_http_module modules/mod_proxy_http.so
-
- # 以下のようにProxyPassを追加し、Tomcat(port:8080)へ転送します
- ProxyPass /app http://localhost:8080/app
- ProxyPassReverse /app http://localhost:8080/app
如下图将静态内容放在apache安装文件夹下,这样就不会传输到Tomcat了。
- Apache24
- └ htdocs
- └ app
- ├ images
- ├ jss
- └ styles
- # 以下のようにProxyPassを追加し転送しないようにします。(転送設定よりも前に記述することで有効になります。)
- ProxyPass /app/images !
- ProxyPass /app/jss !
- ProxyPass /app/styles !
- ProxyPass /app http://localhost:8080/app
- ProxyPassReverse /app http://localhost:8080/app
jsessionidjsessionid 使用 mod_rewrite 模块删除,因为如果请求 URL 具有.
- # 以下の#を除去してモジュールを有効にします。
- LoadModule rewrite_module modules/mod_rewrite.so
-
- # 以下のようにrewite定義を追記します。(proxyPassの前でも後でも大丈夫なようです)
- RewriteEngine On
- RewriteRule ^(.*);jsessionid=(.*)$ $1 [R,L]
-
- ProxyPass /app/images !
- ProxyPass /app/jss !
- ProxyPass /app/styles !
- ProxyPass /app http://localhost:8080/app
- ProxyPassReverse /app http://localhost:8080/app
SSL证书存放目录
- Apache24
- └ conf
- └ ssl
私钥的注意事项
SSL 服务器证书设置
①将set OPENSSL_CONF=E:/Apache24/conf/openssl.cnf
OpenSSL配置文件定义为环境变量。
② 创建加密密钥和 CSRopenssl req -nodes -new -newkey rsa:2048 -keyout ../conf/ssl/server.YYYY.key -out ../conf/ssl/server.YYYY.csr
(3) 获取服务器证书
在生产中,我们会有一个CA颁发它,但是这次我们准备了一个自我证书。openssl x509 -in ../conf/ssl/server.YYYY.csr -days 365 -req -signkey ../conf/ssl/server.YYYY.key -out ../conf/ssl/server.YYYY.crt
httpd-ssl.conf 设置
证书注意事项
到目前为止,中间证书已经定义在 SSLCertificateChainFile 中,但从现在开始,将在 SSLCertificateFile 中创建和定义连接服务器证书和中间证书的文件。(未确认)
_:443> - DocumentRoot "E:/Apache24/htdocs"
- #ServerName www.example.com:443
- #ServerAdmin admin@example.com
-
- # ログファイルローテーション
- #ErrorLog "E:/Apache24/logs/error.log"
- ErrorLog "|bin/rotatelogs.exe logs/ssl_error_%Y%m%d.log 86400 540"
- #TransferLog "E:/Apache24/logs/access.log"
- CustomLog "|bin/rotatelogs.exe logs/ssl_access_%Y%m%d.log 86400 540" common
-
- SSLEngine on
-
- # サーバー証明書と秘密鍵のパスを定義します
- SSLCertificateFile "E:/Apache24/conf/ssl/server_2017.crt"
- SSLCertificateKeyFile "E:/Apache24/conf/ssl/server.2017.key"
-
"\.(cgi|shtml|phtml|php)$"> - SSLOptions +StdEnvVars
E:/Apache24/cgi-bin"> - SSLOptions +StdEnvVars
- BrowserMatch "MSIE [2-5]" \
- nokeepalive ssl-unclean-shutdown \
- downgrade-1.0 force-response-1.0
- #CustomLog "E:/Apache24/logs/ssl_request.log" \
- # "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
- CustomLog "|bin/rotatelogs.exe logs/ssl_request_%Y%m%d.log 86400 540" \
- "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-
-
- RewriteEngine On
- RewriteRule ^(.*);jsessionid=(.*)$ $1 [R,L]
-
- # リバースプロキシを設定してTomcatへ転送します。
- SSLProxyEngine on
- ProxyPass /app/images !
- ProxyPass /app/jss !
- ProxyPass /app/styles !
- ProxyPass /app http://localhost:8080/app
- ProxyPassReverse /app http://localhost:8080/app
-
为 Apache 启用 SSL
我必须启用 mod_socache_shmcb.so 模块以及旧版 mod_ssl.so。
- LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
- LoadModule ssl_module modules/mod_ssl.so
将请求从 http(80) 重定向到 https(443)
现在我启用了 SSL,我将其更改为将来自客户端的 http 请求重定向到 https。
- #ewriteEngine On
- #RewriteRule ^(.*);jsessionid=(.*)$ $1 [R,L]
-
- #ProxyPass /app/images !
- #ProxyPass /app/jss !
- #ProxyPass /app/styles !
- #ProxyPass /app http://localhost:8080/app
- #ProxyPassReverse /app http://localhost:8080/app
-
- #httpでのリバースプロキシはやめ、httpsでリダイレクトするように変更しました。
- RewriteEngine On
- RewriteCond %{HTTPS} off
- RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
禁用 mod_access_compat
Apache2.4 系列不再提供用于访问控制的 Allow 指令和 Deny 指令。
据说如果启用了这个模块就可以使用这个指令,但是由于当前的Web服务器一开始没有定义Allow或Deny,所以我暂时禁用了它。
- # 以下に#を追加してモジュールを無効にします。
- #LoadModule access_compat_module modules/mod_access_compat.so
禁用 htdocs 索引
在您的应用程序中禁用 htdocs 的目录列表。
- <Directory "E:/Apache24/htdocs">
- # 以下のOptionsのIndexesに(-)を付けて無効にします。FollowSymLinksは有効にするため(+)を付けます。
- Options -Indexes +FollowSymLinks
- AllowOverride None
- Require all granted
- Directory>
日志轮换
默认情况下,Access.log 和 error.log 是不旋转的,所以使用 rotatelogs.exe 按日期输出日志文件。
* 每天 0:00 会创建一个新的日志文件。
- # error.logのファイル名に_yyyymmddを付ける
- ErrorLog "|bin/rotatelogs.exe logs/error_%Y%m%d.log 86400 540"
-
- # access.logのファイル名にyyyymmddを付ける
- CustomLog "|bin/rotatelogs.exe logs/access_%Y%m%d.log 86400 540" common
调音
调优只是将当前的 Web 服务器设置继承到 Apache2.4。
您必须测试它是否实际上是最佳设置。
- # 外部定義ファイル httpd-mpm.confとhttpd-default.confを有効にする
- Include conf/extra/httpd-mpm.conf
- nclude conf/extra/httpd-default.conf
- # WinNT MPM
- <IfModule mpm_winnt_module>
- # ThreadsPerChildを250に変更する(デフォルトは150)
- ThreadsPerChild 250
- MaxConnectionsPerChild 0
- </IfModule>
* httpd-default.conf 被省略,因为它是原始文件。
现在我能够以与当前 Web 服务器相同的方式运行它。
不过,在再次研究Apache之后,我觉得我可以在安全性和性能方面做出更好的设置,所以我想借此机会多接触一下Apache。
我也考虑过Apache Haus,但它在设置中有一些自定义,所以我选择了 Apache Lounge 二进制文件,它尽可能接近原始文件。我还参考了 Apache Haus 的内容,例如 SSL 设置。 ↩
我们选择 mod_proxy_http 的原因是因为它被当前的 Web 服务器使用。另外,听说现在的web服务器之所以采用它,是因为使用了mod_poxy_ajp,发生了连接相关的故障,但具体情况不明。 ↩