![envvars - apache2ctl 的默认环境变量](https://linux22.com/image/89227/envvars%20-%20apache2ctl%20%E7%9A%84%E9%BB%98%E8%AE%A4%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我想知道如何在 Ubuntu 16.04 alpha 版本重新启动时启动 k=10 Apache2 服务器进程。昨天,我读到了这个网址,[https://rudd-o.com/linux-and-free-software/tuning-an-apache-server-in-5-minutes],它表示将 Apache2 与 prefork.c 模块一起使用并将 StartServers 设置为 10
<IfModule prefork.c>
StartServers 4
MinSpareServers 3
MaxSpareServers 10
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 10000
</IfModule>
不幸的是,我的 apache2 只有 event.c 模块。我尝试使用 sudo apt-get install apache-mtm-prefork 将 apache2 升级到 prefork.c 模块,但安装错误表示没有此类包可用,因为它可能已过时或过时。然后我尝试 sudo apt-get update 并收到相同的错误消息。
我的下一步是尝试通过更改 /etc/httpd.conf 并使用 StartServers = 5 配置 apache2 事件模块,然后重新启动我的 systemd apache.service 文件和 ps -ef | grep -in "apache2" 仅显示 2 个 www-data apache2 进程和 ps-ef | grep -in "mod" 显示没有 mod-mono-server4 进程。
此外,在 bash shell 命令提示符下运行 apache2 时,它表示语法错误 APACHE2_LOCK_FILE 环境变量丢失。我发现 APACHE2_LOCK_FILE 在我的 /etc/apache2/envvars 文件中定义。
Ubuntu 16.04 apache2 手册页说:“一般来说,apache2 不应该直接调用,而应该通过 /etc/init.d/apache2 或 apache2ctl 调用。默认的 Debian 配置需要 /etc/ 中定义的环境变量apache2/envvars ,如果直接启动 apache2 则不可用,但是,apache2ctl 可用于向 apache2 传递任意参数。”
所以我可以使用 /etc/apache2/envars ,我编辑了我的 systemd apache.service 文件以使用 ExecStart = /etc/init.d/apache2 start 并重新启动了我的 Lenovo ThinkStation Ubuntu 16.04 桌面,但无济于事,我仍然只有 2 www-data apache2 进程和 ps-ef |当我运行 ps -ef | grep -in "mod" 显示没有 mod-mono-server4 进程grep - 在“apache2”中。
请问我做错了什么以及如何解决?请建议我可以做的测试。
我知道许多 Ubuntu 16.04 alpha 版本用户很快就会抱怨我遇到的同样问题。
答案1
apache2
首先,您可以通过查看16.04 中的软件包中提供的 mpm_prefork 模块来确认您已经拥有该模块。如果您这样做,您将看到几个结果:
dpkg -L apache2 | grep fork
/etc/apache2/mods-available/mpm_prefork.conf
/etc/apache2/mods-available/mpm_prefork.load
现在检查哪个 MPM 模块已启用,您将看到 Event MPM 模块已启用,而 Prefork 模块未启用:
ls /etc/apache2/mods-enabled/mpm*
听起来您想禁用 Event MPM 模块并启用 Prefork MPM 模块,您可以使用符号链接来完成此操作,然后重新启动 Apache:
sudo rm /etc/apache2/mods-enabled/mpm*
sudo ln -s /etc/apache2/mods-available/*fork* /etc/apache2/mods-enabled/
也许您的“StartServer”指令将按预期工作。 Event MPM 服务器在单个进程中运行事件循环,因此它不需要所有额外的进程。
您还提到启动 Apache 和 systemd。我建议不要直接启动 Apache 的 http 或使用 apache2ctl。仅通过 systemd 控制它以保持一致性。
以下是一些相关的systemd控制命令,作为示例:
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2
您在评论中对设置 Mono、ASPX 和多个应用程序有更多疑问。您应该单独询问这些问题,并明确您是打算在单个域上提供多个应用程序,还是在多个域上提供多个应用程序。
要使 Apache2 服务在引导时启动,请运行:
sudo systemctl enable apache2
答案2
设置 Ubuntu 16.04 来为驻留在不同根目录中的 aspx 内容提供服务还需要 3 个步骤。
将其放在 apache2.coonf 的末尾
别名 /test "/usr/share/doc/xsp/test" 别名 /personal "/home/user/mypages" AddMonoApplications 默认 "/test:/usr/share/doc/xsp/test,/personal:/home/user /mypages" SetHandler mono SetHandler mono
source /etc/apache2/envvars 修改后如下:
envvars - apache2ctl 的默认环境变量
更改 uid 后这将不正确
取消设置主页
用于支持多个 apache2 实例
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ;然后 SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}" else SUFFIX= fi
由于没有明智的方法来获取脚本中解析的 apache2 配置,因此一些
设置通过环境变量定义,然后在 apache2ctl 中使用,
/etc/init.d/apache2、/etc/logrotate.d/apache2 等
导出 APACHE_RUN_USER=venkat 导出 APACHE_RUN_GROUP=venkat
临时状态文件位置。这可能会在 Wheezy+1 中更改为 /run
导出 APACHE_PID_FILE=/var/run/apache2/apache2.pid 导出 APACHE_RUN_DIR=/var/run/apache2 导出 APACHE_LOCK_DIR=/var/lock/apache2
只有 /var/log/apache2 由 /etc/logrotate.d/apache2 处理。
导出 APACHE_LOG_DIR=/var/log/apache2
mod_dav 等模块使用的语言环境
导出 LANG=C
取消注释以下行以使用系统默认区域设置:
。 /etc/默认/区域设置
导出语言
用于获取“apache2ctl status”状态的命令。
一些提供“www-browser”的软件包需要“--dump”而不是“-dump”。
导出 APACHE_LYNX='www-浏览器-dump'
如果您需要更高的文件描述符限制,请取消注释并调整
以下行(默认为 8192):
APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'
如果您想将参数传递给网络服务器,请在下面添加它们
到 APACHE_ARGUMENTS 环境。
导出 APACHE_ARGUMENTS=''
为维护者脚本启用调试模式。
这将在 Web 服务器模块和 Web 应用程序的包安装上生成详细输出
与 Apache 交互的安装
导出 APACHE2_MAINTSCRIPT_DEBUG=1
在 apache2.conf 的顶部,放置以下行:LoadModule mono_module /usr/lib/apache2/modules/mod_mono.so。
要测试这一点,请输入http://127.0.0.1/test/Default.cs并把http://127.0.0.1/personal/Default.cs在 Firefox 网络浏览器中。