通过 OpenBSD 自带的二进制包来搭建服务器环境,是最省心也最安全的方式。当然你也可以选择从源码编译,但那样费时费力,而且容易遇到各种依赖问题。实际上,OpenBSD 提供了大量编译好的二进制安装包——直接用 pkg_add 从远程服务器安装,包依赖会自动处理,完全不需要手动干预,这一点和通过 Ports 安装很像。下面的配置步骤是在一份英文文档的基础上整理补充的,原文已经找不到了,但核心方法经过多次验证,可以直接拿来用。
首先,设置网络安装服务器的地址(这里用的是官方源):
# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/3.8/packages/i386/
1. 配置 Apache 服务器
Apache 是系统默认安装的,这一步可以跳过安装过程。下面要做的是配置 Apache,让它能够随系统启动而自动运行——因为 /etc/rc 脚本里已经预留了 httpd 服务的启动设置。
# vi /etc/rc.conf
修改 httpd_flags=NO 为:
httpd_flags=""
然后对 Apache 做一些初步设置:
# vi /var/www/conf/httpd.conf
把 Options Indexes FollowSymLinks 改为 Options FollowSymLinks(关闭目录列表),同时根据需要设置 ExtendedStatus On、ServerTokens Prod、ServerSignature Off 等安全相关参数。注意 ServerAdmin 和 ServerName 请根据实际情况填写。
2. 安装 mysql-server
# pkg_add -v mysql-server-4.0.24p1.tgz
# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
如果不想让其他机器连接 MySQL,可以通过以下配置限制:
# vi /etc/my.cnf
bind-address = 127.0.0.1
启动 MySQL 服务器:
# /usr/local/bin/mysqld_safe &
设置 root 的 MySQL 密码:
# /usr/local/bin/mysqladmin -u-root password mypass
对于 chroot 环境下的 MySQL,需要额外创建几个目录:
# mkdir /var/www/var
# chmod -R 1777 /var/www/var
# vi /etc/my.conf
MySQL 启动后会自动生成 /var/www/var/run 目录,如果没有生成则手动创建,并设置权限:
# chmod -R 777 /var/www/var/run
在 /etc/my.conf 中配置 socket 路径:
[client]
socket = /var/www/var/run/mysql/mysql.sock
[mysqld]
socket = /var/www/var/run/mysql/mysql.sock
open-files-limit = 8192
open-files = 1000
为了方便启动和关闭 MySQL 服务,可以建立一个脚本:
# vi /etc/rc.d/mysqld.sh
内容如下:
#!/bin/sh
# mysql startup scripts
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
设置开机启动 MySQL:
# vi /etc/rc.local
if [ -f /etc/my.cnf ]; then
/etc/rc.d/mysqld.sh start
fi
3. 安装配置 PHP
# 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 组件(根据需要增减):
# 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:
# vi /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(注意安全性)。
建立测试 PHP 页面:
# vi /var/www/htdocs/test.php
重启 Apache:
# pkill httpd
# /usr/sbin/httpd
在浏览器中输入 https://IP/test.php 测试一下。
4. 安装 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
确保 APXS = /usr/sbin/apxs,然后执行:
# make
# make install
让 Apache 支持这个模块,在 /var/www/conf/httpd.conf 中添加:
MaxConnPerIP 5
到此,基本环境搭建完成。
附件:配置 Apache 支持 SSL
为了让 Apache 支持 SSL 传输,首先在 /var/www/conf/httpd.conf 中添加:
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
修改 Apache 启动选项,启用 SSL:
# vi /etc/rc.conf.local
将 httpd_flags="" 改为:
httpd_flags="-DSSL"
手动启动和关闭 Apache 可以这样做:
# apachectl startssl
# apachectl stop
创建 SSL 证书的步骤:
- 创建服务器 KEY 文件(1024 位):
- 创建服务器 CSR 文件:
- 生成自签名证书(365 天有效):
# /usr/sbin/openssl genrsa -out /etc/ssl/private/server.key 1024
# /usr/sbin/openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/private/server.csr
这里需要填写一些注册信息(如国家、组织等)。
# /usr/sbin/openssl x509 -req -days 365 -in /etc/ssl/private/server.csr -signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt
虚拟主机配置示例(同时支持 SSL 和普通 HTTP):
NameVirtualHost 192.168.10.1:*
ServerAdmin webmaster@example.com
DocumentRoot /var/www/llzqq
ServerName llzqq.home.com
ErrorLog logs/llzqq.home.com-error_log
CustomLog logs/llzqq.home.com-access_log common
SSLEngine on
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile /etc/ssl/virtualsite.com.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
ServerAdmin webmaster@example.com
DocumentRoot /var/www/llzgg
ServerName llzgg.home.com
ErrorLog logs/llzgg.home.com-error_log
CustomLog logs/llzgg.home.com-access_log common
其他更复杂的配置(如负载均衡、多站点等)待后续补充——最近手边没有 OpenBSD 机器,有些细节没办法实地验证,但以上步骤在 3.8 版本上反复测试过,可以放心使用。
