Categories:
Apache2 HTTP 编译
Recommended Articles
How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 18.04 - DigitalOcean
How to Setup Apache HTTP with SSL Certificate? (geekflare.com)
compiling - Use Different OpenSSL for Apache - Unix & Linux Stack Exchange
compiling - Apache + mod_ssl build not linking to my OpenSSL build - Unix & Linux Stack Exchange
How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 18.04 - DigitalOcean
写给开发人员的实用密码学(八)—— 数字证书与 TLS 协议 - This Cute World
TLS安全策略等级 - 三度 - 博客园 (cnblogs.com)
Ubuntu 20.04 : Apache 웹서버 컴파일 설치 (tistory.com)
《图解密码技术》第14章 SSL/TLS—-为了更安全的通信 - 小超的博客 (xiaochaowei.com)
Overview
Why? 配置完成后,需要 HTTPS 才能访问服务器 (domain name/IP)。
- 编译 OpenSSL
- 编译 Apache HTTP 2.4.5 with SSL module
- 获得 Self-signed SSL certificate
- 配置 Apache 支持 SSL
编译 OpenSSL
关于 clang 的环境变量可以看
OpenSSL 用了自己的一套 build system , 去 Compilation and Installation - OpenSSLWiki 看看。
# Step 1: config and generate the Makefile (similar to cmake/meson)
# (if using clang)
CC=clang CXX=clang++ CFLAGS="-O3" CXXFLAGS="-stdlib=libc++ -O3" LDFLAGS="-rtlib=compiler-rt -unwindlib=libunwind -stdlib=libc++ -lc++ -lc++abi" ./config --prefix=???? #安装路径
# (using gcc)
./config --prefix=???? #安装路径
# ---------------------------------------------------------------------------------------------------------
# Step 2:
make clean
make libclean
make
# ---------------------------------------------------------------------------------------------------------
# Step 3:
make test # 可以不用测
make install # 卸载需要 make uninstall
此处会用到 OpenSSL 创建证书的功能 以及 libcrypto.so.
编译 Apache
参考 https://httpd.apache.org/docs/2.4/install.html
Requirements
可以看 Apache HTTP Installation Troubleshooting Guide (geekflare.com)
- APR and APR-Util
- 下载后放到
httpd_source_tree_root/srclib/
目录下。 - 在
./config
的时候,需要--with-included-apr
告诉系统这些apache-dev
资源在哪里。
- 下载后放到
- Perl-Compatible Regular Expressions Library (PCRE)
- 下载
pcre
后放到httpd_source_tree_root/srclib/
目录下 (不要下载pcre2
) - 在
./config
的时候,需要--with-included-pcre
告诉系统这些apache-dev
资源在哪里。 - 看一看这个 Ubuntu 20.04 : Apache 웹서버 컴파일 설치 (tistory.com)
- 下载
- OpenSSL
- 如果
mod_ssl
被启用,./config
会自动检测 dependencies (apk add
或者像上面那样编译 OpenSSL)
- 如果
下载好源代码后,依旧需要配置(估计是是想搞 cross-platform 的编译,真麻烦)。
About Dynamic Shared Object (DSO)
https://httpd.apache.org/docs/2.4/dso.html
在了解计算机的内存模型后,我们知道 Code 和 Data 都需要加载到内存才能运行。
现在有一个非常大的程序(比如 LLVM, httpd),
- 是一股脑地编译成一个 static binary file ,
- 还是把其他代码分散到 dynamic shared object 或者 dynamic shared library 呢?
这样做也有好处,就是可以随时随地添加/禁用新的功能,避免小修改导致重新编译。
Apache 除了最重要的 httpd
之外,还有其本身的 modules 。
如果想要单独启用一个模块 (比如以前没想到这种需求,后面想启用), 可以看 https://httpd.apache.org/docs/2.4/dso.html
扯远了,可以直接开始编译
# Step 1: config and generate the Makefile (similar to cmake/meson)
# (using gcc)
./configure --enable-ssl -with-ssl=?????? –-enable-so # 其中 -with-ssl 应该与前面的 openssl --prefix 一致。
# (if using clang)
CC=clang CXX=clang++ CFLAGS="-O3" CXXFLAGS="-stdlib=libc++ -O3" LDFLAGS="-rtlib=compiler-rt -unwindlib=libunwind -stdlib=libc++ -lc++ -lc++abi" ./configure --enable-ssl -with-ssl=?????? –-enable-so
# ---------------------------------------------------------------------------------------------------------
# Step 2:
make clean
make
# ---------------------------------------------------------------------------------------------------------
# Step 3:
make test # 可以不用测
make install # 卸载需要 make uninstall
这样就可以让 Apache 获得 SSL support.
其中 –-enable-so
会将 modules 编译成 .so
文件,之后可以在 httpd.conf
文件里载入。
If OpenSSL is not installed to the
/usr/local
default directory,then we may have to manually link httpd with the OpenSSL library by
-with-ssl=
option.Read https://httpd.apache.org/docs/2.4/programs/configure.html#installationdirectories