
我想知道如何在 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 網路瀏覽器中。