使用OpenBSD的HTTPD在OpenBSD 6.6上运行WordPress

介绍

鉴于OpenBSD对安全性的偏爱,仅用它为WordPress网站提供动力才有意义,尤其是因为WordPress和PHP倾向于成为脚本小子的目标。由于OpenBSD的httpd主要用于服务静态页面,因此POST操作保留给fastcgi和slowcgi进程使用。这使得流氓演员更难以破坏Web服务器的进程并获得对服务器的访问权限。POST操作通过管道传递给fastcgi进程,并使用外部解释器。本文将不仅讨论设置WordPress网站,还讨论一些基本的维护技术,以及如何备份和还原您的网站及其数据库。无论您example.com在哪里看到域,都请用您的域替换它。

初始配置

如果尚未这样做,则需要创建一个/etc/doas.conf文件。doas命令是OpenBSD的sudo轻松替代。为了方便起见,我添加了nopass选项,以便您在使用doas时不必重新输入密码。如果您不希望这样做,则只需忽略nopass。

su -
echo "permit nopass keepenv :wheel" > /etc/doas.conf

根据OpenBSD打包部署的方式,有时打包管理器可能未配置存储库。要配置OpenBSD官方存储库,我们必须创建/etc/installurl文件。

doas su
echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl
exit

现在,我们必须添加PHP和WordPress将需要的一些额外模块,以处理诸如图像和加密之类的事情。出现提示时,选择安装最新的PHP软件包。您要做的一件事是将模块ini文件从示例目录复制到主目录。为了启用其他PHP模块,必须这样做。

doas pkg_add -r mariadb-client mariadb-server php php-curl php-mysqli php-zip pecl73-mcrypt pecl73-imagick wget
doas cp /etc/php-7.3.sample/* /etc/php-7.3/.

获取让我们加密证书

在当今世界,必须通过SSL为网站提供服务,否则将被搜索引擎排名低下。幸运的是,OpenBSD有一个很棒的应用程序,称为acme-client。acme-client将自动生成一个新的私钥并请求一个新的完全有效的证书。acme-client依赖于适当的Web服务器,因此我们需要创建一个快速的默认服务器定义。

使用您最喜欢的编辑器,创建/etc/httpd.conf。稍后,我们将其他服务器定义添加到文件中。到目前为止,这足以使acme-client正常运行。

prefork 5
types { include "/usr/share/misc/mime.types" }

server "default" {
    listen on egress port 80
    root "/htdocs"
    directory index "index.html"

    location "/.well-known/acme-challenge/*" {
        request strip 2
        root "/acme"
    }
}

还要使用您喜欢的编辑器create /etc/acme-client.conf

authority letsencrypt {
    api url "https://acme-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-privkey.pem"
}

authority letsencrypt-staging {
    api url "https://acme-staging-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-staging-privkey.pem"
}

domain example.com {
    alternative names { www.example.com }
    domain key "/etc/ssl/private/example.com.key"
    domain full chain certificate "/etc/ssl/example.com.crt"
    sign with letsencrypt
}

现在我们必须启用并启动httpd。完成此操作后,便可以运行acme-client并等待它获取我们的新证书。完成此操作后,我们将添加一个cron作业,以每7天自动请求一个新的作业,因此我们不必担心过期。

doas rcctl enable httpd
doas rcctl start httpd
doas acme-client -v example.com

现在,我们创建cron作业。将此行添加到最后一个条目下方。在这种情况下,我们告诉acme-client在每个星期六的1:00 AM请求新证书。

doas crontab -e
0       1       *       *       6       acme-client -F example.com && rcctl reload httpd

为WordPress配置HTTPD

现在是时候为WordPress设置httpd了。与其将我们网站的定义直接放置在中/etc/httpd.conf,我们将其放置在一个名为的单独文件中,/etc/httpd.conf.example.com并将其包含在主配置文件中。通常,最好将两者分开,将站点范围的定义保留在主配置文件中,并将特定于域的设置保留在不同的定义中。

将以下行添加到/etc/httpd.conf文件的底部:

include "/etc/httpd.conf.example.com"

现在,使用您喜欢的编辑器,创建您的/etc/httpd.conf.example.com。为了方便起见,我们将为您的域创建单独的日志文件。这使得在尝试查找网站的潜在问题时变得更加容易。

server "example.com" {
    listen on egress port 80
    alias "www.example.com"

    # Automatically redirect to SSL
    block return 302 "https://$SERVER_NAME$REQUEST_URI"

    log {
            access "access-example.com"
            error "error-example.com"
    }
}

server "example.com" {
    listen on egress tls port 443
    alias "www.example.com"
    root "/htdocs/wordpress"
    directory index "index.php"

    log {
            access "access-example.com"
            error "error-example.com"
    }
    tcp { nodelay, backlog 10 }

    tls {
            certificate "/etc/ssl/example.com.crt"
            key "/etc/ssl/private/example.com.key"
    }
    hsts {
            # max-age value is the number of seconds in 1 year
            max-age 31556952
            preload
            subdomains
    }

    location "/.well-known/acme-challenge/*" {
            root "/acme"
            request strip 2
    }
    location "/posts/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/page/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/feed/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/comments/feed/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
     location "/wp-json/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/wp-login.php*" {
            authenticate "WordPress" with "/htdocs/htpasswd"
            fastcgi socket "/run/php-fpm.sock"
    }
    location "*.php*" {
            fastcgi socket "/run/php-fpm.sock"
    }
}

为了提高安全性,我们将在登录WordPress管理站点时对用户名和密码实施额外的提示。由于脚本小子喜欢反复尝试并强行使用WordPress的登录名,因此我们在Web服务器级别创建了另一个登录名。通常,在WordPress引发401未经授权的错误之前,他们会得到大约5个猜测。

doas su
cd /var/www/htdocs
doas htpasswd htpasswd <user>
doas chown www:www htpasswd
doas chmod 0640 htpasswd
doas rcctl reload httpd

准备和配置PHP和PHP-FPM

我们必须对php进行更改,以便您的WordPress安装可以发送电子邮件。WordPress和某些插件依靠发送电子邮件的能力来通知您升级,警报和更改。无法发送电子邮件可能会破坏WordPress的某些功能。由于httpd在chroot环境下运行,因此我们必须告诉php如何发送电子邮件。此外,我们必须在两周内对php-fpm做一些性能测试。

查找sendmail_path/etc/php-7.3.ini并进行以下更改:

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; sendmail_path =
sendmail_path = /bin/femail -t -i

在其中查找以下几行,/etc/php-fpm.conf并进行如下更改:

pm.start_servers = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 6

下一步是启用并启动php-fpm。

doas rcctl enable php73_fpm
doas rcctl start php73_fpm

准备和配置MariaDB

MariaDB是MySQL的直接替代品。我们需要为WordPress做一些初始配置和数据库准备工作。

在有效使用MariaDB之前,我们需要允许mysql守护程序使用比默认资源更多的资源。为此,/etc/login.conf通过在底部添加此条目来进行以下更改。

mysqld:\
    :openfiles-cur=1024:\
    :openfiles-max=2048:\
    :tc=daemon:

我们必须在MariaDB配置文件中进行一些更改/etc/my.cnf。通过让mysql客户端和服务器通过UNIX域套接字而不是TCP进行通信,可以降低服务器的内存使用量。您不必进行以下建议的所有更改。要更改的两个重要方面是socket行和注释bind-address行。这会将套接字移到/var/wwwchroot环境内部,以便WordPress可以连接到数据库。通过注释掉这一bind-address行,我们可以防止MariaDB监听TCP端口。

[client-server]
socket=/var/www/var/run/mysql/mysql.sock
#port=3306

# This will be passed to all MariaDB clients
[client]
#password=my_password

# The MariaDB server
[mysqld]
# To listen to all IPv4 network addresses, use "bind-address = 0.0.0.0"
#bind-address=127.0.0.1
# Directory where you want to put your data
#data=/var/mysql
# This is the prefix name to be used for all log, error and replication files
#log-basename=mysqld
# Logging
#log-bin=/var/mysql/mariadb-bin
#max_binlog_size=100M
#binlog_format=row
#expire_logs_days = 7
#general-log
#slow_query_log
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M

现在我们需要运行MariaDB安装二进制文件并启用并启动MariaDB。此过程将设置root密码,并有选择地删除测试数据库。在安全安装阶段遵循所有建议是一个好主意。

doas mysql_install_db
doas rcctl enable mysqld
doas rcctl start mysqld
doas mysql_secure_installation

创建WordPress数据库和数据库用户。请记住<wp_user>用您选择的数据库用户名和<password>您选择的复杂密码替换。

mysql -u root -p 
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT

安装和配置WordPress

WordPress已经有一段时间没有正式的OpenBSD端口了,因为它几乎可以立即使用。下载,解压缩和移动WordPress安装文件夹。

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xvfz latest.tar.gz
doas mv wordpress /var/www/htdocs/.
doas chown -R www:www /var/www/htdocs/wordpress
doas chmod 0755 /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress/
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

我们必须复制/etc/resolv.conf/etc/hosts到一个目录,我们将创建一个名为/var/www/etc。这样,WordPress才能成功进入市场。您将需要此文件,以便通过WordPress管理站点下载插件和主题。正常运行Jet Pack插件也很重要。

doas mkdir /var/www/etc
doas cp /etc/hosts /var/www/etc/.
doas cp /etc/resolv.conf /var/www/etc/.

在此处,通过您在Web服务器定义中指定的URL,使用https浏览到您的WordPress网站。如果一切正常,您应该看到WordPress安装向导。当获得用于指定数据库服务器的选项时,应使用localhost:/var/run/mysql/mysql.sock

一旦安装了WordPress,就可以设置永久链接,使它们看起来对SEO更友好了。在WordPress管理屏幕上,转到Settings -> Permalinks。单击自定义结构并键入/posts/%postname%。进行更改后,单击“保存更改”按钮。您现在有了看起来更漂亮的链接。例如,一个永久链接将如下所示:https://example.com/posts/example-blog-post

从这里,您应该已经可以使用基本网站。确保您安装了诸如Jet Pack和WP-Super Cache之类的插件。WP-Super Cache插件通过缓存网页和消除持续的数据库查找来帮助您加快网站访问速度,JetPack为您提供了一些出色的收视率统计信息。

备份您的WordPress网站和数据库

不用说,备份您的网站和数据库非常重要。值得庆幸的是,这是一件相对容易的事情。将两者都备份到您的主目录,然后可以通过scp将它们复制到另一个位置。您也可以通过Vultr控制面板创建快照。两者都做是一个好主意。

cd /var/www/htdocs
tar cvfz wordpress.tgz wordpress/
cp wordpress.tgz /home/user
mysqldump -u root -p wordpress > wordpress.sql && gzip wordpress.sql

恢复您的WordPress网站

如果您的数据库已损坏并且需要还原,请执行以下操作:

gunzip wordpress.sql.gz
mysql -u root -p wordpress
DROP USER '<user>'@'localhost';
DROP DATABASE wordpress;
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT
mysql -u root -p wordpress < wordpress.sql

如果您对WordPress脚本文件进行了更改,导致文件损坏,则可以随时通过管理控制台重新安装WordPress。查找该Updates部分,然后单击链接。寻找标有的按钮Re-install Now。这至少可以解决已损坏的问题,但您的大多数配置应保持不变。

如果您的数据库状态良好,但是您不小心编辑了一个文件,并且将事情弄乱了,甚至无法进入WordPress管理控制台,那么请执行以下操作:

rm /var/www/htdocs/wordpress
cp /home/user/wordpress.tgz /tmp
tar xvfz wordpress.tgz
mv wordpress /var/www/htdocs/.
chown -R www:www /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;


Leave a Comment

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。