用 OpenBSD 自己提供的二进制软件包来搭建服务器环境,其实是最省心的方法。你当然也可以下载源码包自己编译安装,但那样既费时又费力,还容易踩坑。OpenBSD 官方仓库里已经准备好了大量编译好的二进制包,直接用 pkg_add 安装就行,不仅能保证系统的安全性(毕竟都是官方的签名包),还能自动处理包之间的依赖关系——这一点跟 ports 的方式很像,但更快捷。下面这份文档是在一份英文文档基础上整理补充出来的,具体原始的 E 文出处已经找不到了,但内容经过实践验证,可以直接上手。
首先,设定网络安装服务器的地址:
# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/
Apache 服务器配置
Apache 是 OpenBSD 系统默认安装的,所以这一步可以跳过安装,直接进行配置。为了让 Apache 随系统开机启动,需要修改 /etc/rc.conf:
# vi /etc/rc.conf
把 httpd_flags=NO 改为 httpd_flags=""(当然,如果后续要启用 SSL,后面会改成别的)。
然后对 Apache 做基本设置:
# vi /var/www/conf/httpd.conf
ExtendedStatus On
ServerAdmin admin@example.com
ServerName yourserver.com
ServerTokens Prod
ServerSignature Off
Options Indexes FollowSymLinks 改为 Options FollowSymLinks
安装 MySQL Server-4.0.24p1
# pkg_add -v mysql-server-4.0.24p1.tgz
# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
如果不希望其他机器连接 MySQL,可以在 /etc/my.cnf 里加上 bind-address = 127.0.0.1。
启动 MySQL 服务器:
# /usr/local/bin/mysqld_safe &
设置 root 密码:
# /usr/local/bin/mysqladmin -u root password mypass
为了方便启动和关闭 MySQL 服务,可以创建一个脚本 /etc/rc.d/mysqld.sh:
#!/bin/sh
case "$1" in
start)
if [ -x /usr/local/bin/mysqld_safe ]; then
/usr/local/bin/mysqld_safe &
fi
;;
stop)
pkill mysqld &
rm -f /var/run/mysql/mysql.sock &
;;
*)
echo "$0 start | stop"
;;
esac
exit 0
# chmod 555 /etc/rc.d/mysqld.sh
再在 /etc/rc.local 里加入开机启动:
if [ -f /etc/my.cnf ]; then
/etc/rc.d/mysqld.sh start
fi
安装配置 PHP-4.4.1
# pkg_add -v php4-core-4.4.1p0.tgz
# cp /usr/local/share/examples/php4/php.ini-recommended /var/www/conf/php.ini
# /usr/local/sbin/phpxs -s
因为 OpenBSD 上的 Apache 启用了 chroot 机制,必须为 PHP 创建工作目录:
# mkdir /var/www/tmp
# chmod 1777 /var/www/tmp
下面按需安装几个 PHP 组件,装完后用 phpxs -a 激活:
# pkg_add -v php4-gd-4.4.1p0-no_x11.tgz
# /usr/local/sbin/phpxs -a gd
# pkg_add -v php4-mysql-4.4.1p0.tgz
# /usr/local/sbin/phpxs -a mysql
# pkg_add -v php4-ncurses-4.4.1p0.tgz
# /usr/local/sbin/phpxs -a ncurses
# pkg_add -v php4-imap-4.4.1p0.tgz
# /usr/local/sbin/phpxs -a imap
# pkg_add -v php4-curl-4.4.1p0.tgz
# /usr/local/sbin/phpxs -a curl
# pkg_add -v php4-dbx-4.4.1p0.tgz
# /usr/local/sbin/phpxs -a dbx
# pkg_add -v php4-ldap-4.4.1p0.tgz
# /usr/local/sbin/phpxs -a ldap
# pkg_add -v php4-pdf-4.4.1p0.tgz
# /usr/local/sbin/phpxs -a pdf
# pkg_add -v php4-snmp-4.4.1p0.tgz
# /usr/local/sbin/phpxs -a snmp
最后配置 Apache 支持 PHP。编辑 /var/www/conf/httpd.conf:
DirectoryIndex index.html index.php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
再修改 /var/www/conf/php.ini:
doc_root = "/htdocs"
register_globals = On
建立测试页:
# vi /var/www/htdocs/test.php
重启 Apache 后访问 https://IP/test.php 即可测试。
# pkill httpd
# /usr/sbin/httpd
限制单 IP 并发连接数
使用 mod_limitipconn 模块可以限制每个 IP 的并发连接数。下载并编译:
# wget https://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz
# tar xzf mod_limitipconn-0.04.tar.gz
# cd mod_limitipconn-0.04
# vi Makefile
将 Makefile 中的 APXS 改为 /usr/sbin/apxs,然后:
# make
# make install
在 Apache 配置中启用:
MaxConnPerIP 5
到此,基础环境就已经搭建完毕。
附件部分:SSL 传输配置
如果需要让 Apache 支持 HTTPS,需要额外配置 SSL。首先在 /var/www/conf/httpd.conf 中添加两行:
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
为了让 Apache 启动时启用 SSL,修改 /etc/rc.conf.local:
# vi /etc/rc.conf.local
httpd_flags="-DSSL"
手动启动/停止 SSL 模式可以使用:
# apachectl startssl
# apachectl stop
下面是生成自签名证书的完整步骤:
- 创建服务器密钥文件(1024 位):
# /usr/sbin/openssl genrsa -out /etc/ssl/private/server.key 1024
- 创建证书签名请求(CSR):
# /usr/sbin/openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/private/server.csr
按提示填写注册信息即可。
- 生成自签名证书(365 天有效):
# /usr/sbin/openssl x509 -req -days 365 -in /etc/ssl/private/server.csr -signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt
- 虚拟主机配置示例:
NameVirtualHost 192.168.10.1:*
ServerAdmin admin@example.com
DocumentRoot /var/www/llzqq
ServerName yourdomain.com
ErrorLog logs/yourdomain.com-error_log
CustomLog logs/yourdomain.com-access_log common
SSLEngine on
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
ServerAdmin admin@example.com
DocumentRoot /var/www/llzgg
ServerName yourdomain2.com
ErrorLog logs/yourdomain2.com-error_log
CustomLog logs/yourdomain2.com-access_log common
到这里,整个 OpenBSD + Apache + MySQL + PHP 的服务器环境,包括 SSL 支持,就全部配置完成了。
