亚洲最大成人,日韩一二三在线视频播,亚洲综合电影 http://m.bjmhhq.com 簡簡單單分享。 Sun, 08 Jun 2025 10:06:01 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.8.1 寶塔面板設置Docker加速站提示錯誤:全局配置文件有誤,請檢查Expecting value:line 1 column 1(char 0)解決方法 http://m.bjmhhq.com/129274.html Sun, 08 Jun 2025 10:06:01 +0000 http://m.bjmhhq.com/?p=129274 寶塔? docker? 修改加速 報錯:寶塔 設置失??!讀取配置文件失?。篍xpecting value: line 1 column 1 (char 0)

解決辦法:
打開文件:/etc/docker/daemon.json
填入代碼:

{
  "registry-mirrors": [
    "https://ung2thfc.mirror.aliyuncs.com"
  ],
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}

然后保存即可。

]]>
/var/log/maillog日志太大占滿/var空間如何清理 http://m.bjmhhq.com/129273.html Sun, 27 Apr 2025 02:52:39 +0000 http://m.bjmhhq.com/?p=129273 一、情景描述

節點磁盤空間告警,使用df -h查看發現是/var盤滿了,cd進入/var目錄下,du -sch log/ 發現是log目錄占用空間大,cd切換到log目錄下,du -dh *查看是因為maillog日志太大導致的,故需要清理maillog日志。

二、處理過程

我是想將maillog分割成幾個小文件,再刪除很久之前的數據,但是/var空間滿了,我就將maillog移動到/tmp目錄下進行分割。

①mv /var/log/maillog /tmp

②split -b 500M /tmp/maillog

分割完成后我就將/var/log/maillog文件和/tmp/maillog刪除了,想要將分割好的小文件移動到/var/log下,但是還是提示沒有空間,使用df -h查看發現/var使用率100%了,但是在/var下的各個目錄都很小,然后查看delete進程。

③lsof | grep delete 找到了刪除/var/log/maillog的進程。

④kill -9 PID 刪除對應的進程。

至此空間告警恢復,再將之前分割好的小文件移動到/var/log下即可。

三、補充清空日志方法

查詢打開/var/log/messages文件的進程的進程ID(PID):

lsof | grep messages

得到輸出:

COMMAND ???PID USER ??FD ??TYPE DEVICE ??SIZE/OFF NODE NAME

rsyslogd ?1455 root ???4w ??REG ???8,6 1299113404 2686 messages

abrt-dump 1932 root ???4r ??REG ???8,6 1299113404 2686 messages

結束生成messages的進程:

kill -9 1455

kill -9 1932

清空日志并重啟:

cat /dev/null > /var/log/messages

reboot


不需要郵件系統,直接卸載干凈。如下。

1. 查看是否安裝了郵件服務

直接查安裝的軟件包:

bash
rpm -qa | grep -E 'postfix|sendmail'

如果輸出有 postfixsendmail,說明安裝了郵件系統。


2. 查看郵件服務是否在運行

查一下系統服務狀態:

bash
systemctl status postfix
systemctl status sendmail
  • 如果是 active (running),就說明郵件服務正在運行。

  • 如果是 inactivenot found,說明沒在跑,甚至可能沒安裝。


3. 檢查端口監聽

郵件服務器一般監聽端口 25(SMTP端口)。

你可以用:

bash
ss -ltnp | grep :25

或者:

bash
netstat -ltnp | grep :25

如果看到有程序(比如 master 是 postfix 的主進程)監聽 25端口,那就是有郵件服務在運行。


4. 直接測試 sendmail 命令

在終端輸入:

bash
which sendmail

或者:

bash
sendmail -V
  • 如果有返回路徑或版本號,說明系統上有 sendmail (可能是 Postfix 的 sendmail 兼容接口)。


總結一下:

 

檢查方法 結果含義
rpm -qa 查軟件包 判斷是否安裝
systemctl status 查服務 判斷是否運行
ss / netstat 查端口 判斷是否監聽 SMTP
sendmail 命令 檢查郵件發送接口

不過,有沒有運行還得繼續確認一下。

你可以馬上查一下 Postfix 的服務狀態:

bash
systemctl status postfix

如果你看到是 active (running),那就是在運行;如果是 inactivedead,說明雖然安裝了,但沒啟用。

如果你不需要郵件服務,有兩種選擇:


方案一:僅禁用 + 停止 Postfix(保留安裝)

命令如下:

bash
# 停止 postfix 服務
systemctl stop postfix

# 禁止開機自啟
systemctl disable postfix

這樣做的效果是:

  • Postfix 停止運行

  • 以后開機也不會自動啟動

  • 但系統上還保留了 postfix 軟件包(占用一點磁盤空間)


方案二:徹底卸載掉 Postfix

如果你完全不需要郵件系統,可以卸載:

bash
# 卸載 postfix 軟件包
yum remove postfix

然后它就從你的系統上徹底干凈地消失了。


小提醒

卸載 postfix 后,系統有些通知(比如 cron 計劃任務失敗通知郵件)可能會丟失掉,如果完全是自己用的服務器,基本沒事。

]]>
/.well-known/traffic-advice" failed (2: No such file or directory), client: 關于這個問題 http://m.bjmhhq.com/129264.html Mon, 30 Dec 2024 02:24:19 +0000 http://m.bjmhhq.com/?p=129264
遇到了這個錯誤日志:。。。。。/.well-known/traffic-advice" failed (2: No such file or directory), client: 。。。。。以下是折騰記錄。

問題分析

  1. 請求路徑:
    • 客戶端請求了?/.well-known/traffic-advice,這是一個標準的 URI 路徑,通常用于提供特定的服務或協議。
  2. 文件不存在:
    • 服務器未能找到該路徑下的文件,導致出現錯誤。

解決方案

  1. 創建缺失的文件:
    • 如果您需要這個文件來支持某些功能(例如,流量建議),請創建一個空的或包含必要內容的文件:
      touch /www/wwwroot/網站目錄/.well-known/traffic-advice
  2. 檢查配置:
    • 確保您的服務器配置允許訪問?/.well-known/?路徑。某些情況下,可能需要在 Nginx 或 Apache 配置中進行調整,以允許訪問該目錄。
  3. 忽略無關請求:
    • 如果這個請求不影響您的網站功能,并且您不需要處理這種類型的請求,可以選擇忽略這些錯誤。定期監控日志,以確保沒有其他重要問題。
  4. 設置重定向(可選):
    • 如果您希望將此請求重定向到其他有效的 URL,可以在服務器配置中添加重定向規則。

解決步驟

  1. 創建 traffic-advice 文件:
    • /.well-known/?目錄下創建一個名為?traffic-advice 的文件,內容如下:
      [{
        "user_agent": "prefetch-proxy",
        "google_prefetch_proxy_eap": {
          "fraction": 1.0
        }
      }]
      
  2. 設置 MIME 類型:
    • 您需要確保服務器返回正確的 MIME 類型。根據您使用的服務器類型,您可以選擇以下配置:
    • 對于 Apache: 在 .htaccess 文件中添加以下行:
      RewriteRule ^\.well-known/traffic-advice$ - [T=application/trafficadvice+json,END]
      
    • 對于 Nginx: 在 Nginx 配置文件中添加以下內容:
      location /.well-known/traffic-advice {
          types { } default_type "application/trafficadvice+json; charset=utf-8";
      }
      

這些是參考修改的原文:

Googlebot with name "Chrome Privacy Preserving Prefetch Proxy" tries to find instructions if it can preload your website for the user surfing on Chrome (Chrome?thinks, for example, the link to your website is going to be clicked on).

名為“Chrome Privacy Preserving Prefetch Proxy”的 Googlebot 會嘗試查找說明,以確定它是否可以為在 Chrome 上沖浪的用戶預加載您的網站(例如,Chrome?認為指向您網站的鏈接將被點擊)。

Basically what we, webmasters,?are interested in is to get rid of 404s?caused by this feature. The most simplest way is to create the file?traffic-advice?(without any extension) in the directory?.well-known?with the content:
基本上,我們網站管理員感興趣的是擺脫由此功能引起的 404。最簡單的方法是在?.well-known?目錄中創建文件?traffic-advice(不帶任何擴展名),其內容為:

[{
  "user_agent": "prefetch-proxy",
  "google_prefetch_proxy_eap": {
    "fraction": 1.0
  }
}]

Problem is that the bot requires a specific MIME type. On Apache, you can add these lines to the main?.htaccess?file:
問題是機器人需要特定的 MIME 類型。在 Apache 上,您可以將以下行添加到主?.htaccess?文件中:

RewriteRule ^\.well-known/traffic-advice$ - [T=application/trafficadvice+json,END]

On Nginx you can alter your config with these lines:
在 Nginx 上,您可以使用以下幾行更改您的配置:

# Private Prefetch Proxy
# https://developer.chrome.com/blog/private-prefetch-proxy/
location /.well-known/traffic-advice {
   types { } default_type "application/trafficadvice+json; charset=utf-8";
}

More info or advanced Nginx config can be found from the?source.
更多信息或高級 Nginx 配置可以從中找到。


如果nginx配置參數遇上這樣的問題:ERROR: nginx: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in /www/server/panel/vhost/nginx。。。。。。。。。。

可以參考修改:

問題 1:廢棄的 listen ... http2 指令
在較新的 Nginx 版本中,listen ... http2 指令已被廢棄,應該使用 http2 指令來代替。例如,將以下配置:

listen 443 ssl http2;

修改為:

listen 443 ssl;
http2 on;

你可以在以下文件中(相關網站的配置文件)進行相應的修改:

/www/server/panel/vhost/nginx/相關網站1.conf

/www/server/panel/vhost/nginx/相關網站2.conf

問題 2:location 指令的位置不正確
location 指令不能直接放在 nginx.conf 文件中,它必須位于 server 塊內。確保你的 location 指令正確嵌套在 server 塊中。例如,以下配置是正確的(只是參考位置):

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

確保在你的 /www/server/nginx/conf/nginx.conf 文件中將 location 指令放在 server 塊內。

完成配置更改后,建議重啟或重新加載 Nginx 以使更改生效。

]]>
華碩路由器的ddns用不了, 還有哪個可以用,備選替代選擇 http://m.bjmhhq.com/129261.html Sun, 29 Dec 2024 04:10:44 +0000 http://m.bjmhhq.com/?p=129261 華碩路由器的ddns用不了, 還有哪個可以用,備選替代選擇尊敬的華碩用戶: 為配合網絡安全法規及政策的要求,進一步提升服務安全性與質量,華碩將對ASUS DDNS服務進行調整。當前的ASUS DDNS服務將停止。我們為您提供了路由器內嵌的其他第三方DDNS服務作為替代方案,以滿足您的動態域名解析需求。感謝您長期以來對華碩路由器的支持與信任!我們始終致力于為用戶提供更安全、更穩定的網絡體驗,與您攜手創造智慧網絡的美好未來。請關注我們的公告以獲取最新信息。 華碩團隊

以上是華碩ddns官方發的通告。

替代的可用com,就是通過app客戶端去刪除原有的主機名。

然后再去網頁端,重新啟用,就有www-asus-com的可以選擇了。

我遇到的情況,必須先去手機客戶端刪除舊的主機名,網頁端才有com可選。分享給大家參考下。

 

]]>
/tmp/lshttpd/swap 占用系統盤空間 OpenLiteSpeed 移動交換目錄 http://m.bjmhhq.com/129259.html Thu, 26 Dec 2024 02:35:00 +0000 http://m.bjmhhq.com/?p=129259 /tmp/lshttpd/swap 寶塔默認設置的swap交換分區文件 這個怎么改到數據盤

OpenLiteSpeed move Swapping Directory
OpenLiteSpeed 移動交換目錄

By default OpenLiteSpeed use /tmp/lshttpd/swap for temp files. If your /tmp partition is small, disk may get full.
默認情況下,OpenLiteSpeed 對臨時文件使用 /tmp/lshttpd/swap。如果您的 /tmp 分區很小,磁盤可能會變滿。

To move OpenLiteSpeed swap partition to / partition do the following.
要將 OpenLiteSpeed 交換分區移動到 / 分區,請執行以下操作。

mkdir -p /lswstmp/lshttpd/swap
chmod 750 /lswstmp/lshttpd
chmod 700 /lswstmp/lshttpd/swap
chown -R nobody:nobody /lswstmp/lshttpd

Now login to OpenLiteSpeed admin interface at
現在登錄 OpenLiteSpeed 管理界面

https://your-server-ip:7080/login.php

If you don’t have user name and password, you can reset it by running command
如果您沒有用戶名和密碼,可以通過運行 command 來重置它

/usr/local/lsws/admin/misc/admpass.sh

Once logged in, go to
登錄后,轉到

Server Configuration > General

/tmp/lshttpd/swap 占用系統盤空間  OpenLiteSpeed 移動交換目錄

Under “Server Process’ section, you need to edit value of “Swapping Directory”. Default value is “/tmp/lshttpd/swap”, change it to “/lswstmp/lshttpd/swap”.
在“Server Process(服務器進程)”部分下,您需要編輯 “Swapping Directory”(交換目錄)的值。默認值為 “/tmp/lshttpd/swap”,將其更改為 “/lswstmp/lshttpd/swap”。

Restart OpenLiteSpeed. You can do it using web interface or using SSH.
重新啟動 OpenLiteSpeed。您可以使用 Web 界面或使用 SSH 來完成。

systemctl restart lsws
]]>
Installing CyberPanel 安裝 CyberPanel http://m.bjmhhq.com/129258.html Sun, 22 Dec 2024 06:26:29 +0000 http://m.bjmhhq.com/?p=129258 Requirements for Installation.
安裝要求。

In order to install CyberPanel, you need to ensure that you meet the following requirements.
為了安裝 CyberPanel,您需要確保滿足以下要求。

  • Server with fresh installation of?Ubuntu 18.04, Ubuntu 20.04, AlmaLinux 8,?AlmaLinux?9, Ubuntu 22.04,?CloudLinux 8.
    全新安裝?Ubuntu 18.04、Ubuntu 20.04、AlmaLinux 8、AlmaLinux?9、Ubuntu 22.04、CloudLinux 8?的服務器。
  • 1024MB RAM, or higher??1024MB RAM 或更高
  • 10GB Disk Space??10GB 磁盤空間

CyberPanel?with?CyberPanel Ent
Cyber Panel??Cyber Panel Ent

CyberPanel is exactly the same in both versions. The only distinction lies in the choice of web server running in the back-end.
Cyber Panel 在兩個版本中完全相同。唯一的區別在于選擇在后端運行的 Web 服務器。

  1. CyberPanel?normally comes with OpenLiteSpeed and it is completely free for an unlimited number of domains (You can host unlimited domains) and work processes.?
    Cyber Panel?通常帶有 OpenLiteSpeed,并且對于無限數量的域(您可以托管無限的域)和工作流程是完全免費的。
  2. CyberPanel?Enterprise?comes with LiteSpeed Web Server Enterprise and it is free for one domain and if you want for multiple domains you can get different plans according to your needs on the?Pricing page. The CyberPanel License includes the price of the Litespeed Enterprise license.
    Cyber PanelEnterprise?附帶 LiteSpeed Web Server Enterprise,一個域是免費的,如果您想要多個域,您可以在定價頁面上根據您的需要獲得不同的計劃。Cyber Panel 許可證包括 Litespeed Enterprise 許可證的價格。

To learn more about?Open Litespeed?and?Litespeed Enterprise?please check this comprehensive?comparison.
要了解有關?Open Litespeed??Litespeed Enterprise?的更多信息,請查看此綜合比較。

Let’s proceed with the installation.
讓我們繼續安裝。

The CyberPanel installation process is straightforward and can be completed by following the provided instructions.
Cyber Panel 安裝過程很簡單,可以按照提供的說明完成。

  • Step 1:?Connect to the server via SSH client.?(Putty,?Bitvise SSH client, etc)
    第 1 步通過 SSH 客戶端連接到服務器。PuttyBitvise SSH 客戶端等)

    First login to your server through SSH client as a Root user (Sudo will not work). You can get the Login details from your web host.
    首先以 Root 用戶身份通過 SSH 客戶端登錄您的服務器(Sudo 將不起作用)。您可以從您的虛擬主機獲取登錄詳細信息。
  • Step 2:?Update server Packages.
    第 2 步:更新服務器軟件包。

    Update your server OS first (Because it updated overall services because it provides much better compatibility). Run this command
    首先更新您的服務器操作系統(因為它更新了整體服務,因為它提供了更好的兼容性)。運行此命令

For Ubuntu:??對于 Ubuntu

sudo apt update && sudo apt upgrade -y

For CentOS/Alma/Rocky:
對于 CentOS/Alma/Rocky

sudo yum check-update
sudo yum update
  • Step 3:?Run the Installation Script.?Execute the provided command to initiate the automated installation script. This script will guide you through several decisions regarding the LiteSpeed version and additional add-ons you wish to install.
    第 3 步運行安裝腳本。執行提供的命令以啟動自動安裝腳本。此腳本將指導您完成有關您希望安裝的 LiteSpeed 版本和其他附加組件的幾個決定。
sh <(curl https://cyberpanel.net/install.sh || wget -O - https://cyberpanel.net/install.sh)
  • For some reason, If you are not log in?as root user, Then use this below Script.
    出于某種原因,如果您沒有以 root 用戶身份登錄,請使用下面的腳本。
sudo su - -c "sh <(curl https://cyberpanel.net/install.sh || wget -O - https://cyberpanel.net/install.sh)"
  • Step 4:?Select the version of LiteSpeed that you would like to use.
    第 4 步選擇您要使用的 LiteSpeed 版本。

    As mentioned above in the?CyberPanel with?CyberPanel?Ent?Select which version of Litespeed You want to Install. If you select Litespeed Enterprise, Please first ensure that you have got the license key. You can visit the?Pricing page?to get the required plan.
    如上所述,在 Cyber Panel 中使用?Cyber PanelEnt?選擇要安裝的 Litespeed 版本。如果您選擇 Litespeed Enterprise,請首先確保您已獲得許可證密鑰。您可以訪問?定價 頁面以獲取所需的計劃。
  • If you select LiteSpeed Enterprise, you will see the following prompt. Enter your serial number
    如果您選擇 LiteSpeed Enterprise,您將看到以下提示。輸入您的序列號

    If you do not have any license, you can also use a trial license (if the server has not used a?trial license before), type TRIAL
    如果您沒有任何許可證,您也可以使用試用許可證(如果服務器之前沒有使用過試用許可證),鍵入 TRIAL

    Please input your serial number for LiteSpeed WebServer Enterprise:
    請輸入您的 LiteSpeed WebServer Enterprise 序列號:
  • Step 5:?Select Services and Packages.
    第 5 步選擇 Services and Packages。

    You will encounter a sequence of prompts offering various options and add-ons for selection.
    您將遇到一系列提示,其中提供了各種選項和附加組件以供選擇。

    –?Full Service (default Y):
    – 全方位服務(默認 Y):


    PowerDNS?– an open-source DNS server
    PowerDNS?– 開源 DNS 服務器

    Postfix?– open-source mail transfer agent
    Postfix?– 開源郵件傳輸代理

    Pure-FTPd?– open-source FTP server
    Pure-FTPd?– 開源 FTP 服務器


    ?Remote MySQL (default N):
    – 遠程 MySQL(默認 N):

    Allow for your Database to be installed on a remote server
    允許將數據庫安裝在遠程服務器上
  • ?Remote MySQL (default N):
    – 遠程 MySQL(默認 N):

    Allow for your Database to be installed on a remote server
    允許將數據庫安裝在遠程服務器上


    –?CyberPanel Version (default Latest Version):
    – Cyber Panel 版本(默認最新版本):

    You can choose to install a previous version of CyberPanel, or press Enter to install the latest version.
    您可以選擇安裝舊版本的 CyberPanel,或按 Enter 鍵安裝最新版本。


    –?Password (default “1234567”):
    – 密碼(默認“1234567”):

    Using the default password is?not advisable. It is recommended to set a?strong?password of your own by choosing ‘s’ or generate a?random?password by selecting ‘r’. After the installation, you will see the password prompt displayed on the screen.
    不建議使用默認密碼。建議通過選擇 's' 來設置自己的強?密碼,或者通過選擇 'r' 來生成隨機?密碼。安裝后,您將在屏幕上看到密碼提示。


    –?Memcached (default Y):
    –?Memcached(默認 Y):

    Distributed memory object caching system
    分布式內存對象緩存系統


    –?Redis (default Y):
    –?Redis(默認 Y):

    In-memory data structure store, used as a database, cache, and message broke
    內存數據結構存儲,用作數據庫、緩存和消息中斷


    –?Watchdog (default Yes):
    –?看門狗(默認是)

    A kernel watchdog is used to monitor if a system is running. It is supposed to automatically reboot hanged systems due to unrecoverable software errors
    內核監視器用于監視系統是否正在運行。它應該自動重啟由于不可恢復的軟件錯誤而掛起的系統

  • Step 6: Installation Processing
    第 6 步:安裝處理

    The installation process will initiate automatically and is expected to be complete within 5-10 minutes, depending on your server’s speed.
    安裝過程將自動啟動,預計在 5-10 分鐘內完成,具體取決于您服務器的速度。
  • Step 7: Finalize Installation
    第 7 步:完成安裝

    Upon completion of the installation process, you will encounter a screen displaying important information regarding your configuration. It is recommended to select and securely copy this information to a safe location for future reference.
    安裝過程完成后,您將看到一個屏幕,其中顯示有關您的配置的重要信息。建議選擇此信息并將其安全地復制到安全位置以備將來參考。
]]>
用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種 http://m.bjmhhq.com/129257.html Fri, 13 Dec 2024 15:07:58 +0000 http://m.bjmhhq.com/?p=129257

新年伊始,萬象更新,各位小伙伴們新年好!

前不久年初時(2021年),剛折騰著把窩倒騰到了新東家。

折騰就是累,不過就在這一通折騰后,我突然發現了一個好東西。

入坑之初當我懷疑新東家的網速或穩定性是否比老東家更可靠時,不經意間我注意到了與以往不一樣的東西。

文章轉載自:https://www.sysadm.cc/index.php/webxuexi/810-give-up-nginx-then-using-laravel-with-openlitespeed

可能我網絡什么原因限制,經常打不開。所以搬過來做個記錄。感謝作者。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片1

看到了沒,新東家使用的是?LiteSpeed?,而在此之前我一度使用的不是?Nginx?就是?Apache?這類的大眾款!

怪我孤陋寡聞,有人說貧窮限制了想像力,不不不,我覺得只要是個窮人,他根本就是哪兒哪兒都被限制了嘛!

不過還好窮人多少有點時間可以擠一擠,所以我就初步地研究了一下這個?LiteSpeed?,順便我也使用過?Laravel?,最后將兩者結合起來也就有了后面的文字!

 

一、OpenLiteSpeed 是個啥

哎?不是正說著?LiteSpeed?嗎,怎么變成了?OpenLiteSpeed??

最初我也和小伙伴們一樣有此疑問,其實前面冠以?OPEN?字樣,很容易聯想到是開源軟件。

沒錯,OpenLiteSpeed?(以下簡稱?OLS?)就是和?Apache?或?Nginx?相似的?WEB?服務引擎,是?LiteSpeed EnterPrise?的開源社區版本。

國內網絡中主流引擎仍是?Nginx?和?Apache?的天下,OLS?似乎顯得小眾了一些,甚至其知名度還不如?Lighttpd?。

不過要知道?OLS?在國外發展迅猛,其優點多多,不僅僅提供了諸如?WordPress?、?Joomla?、OpenCart?或?Drupal?等常見應用的插件支持,而且還支持新一代的?HTTP3?協議。

雖然社區版的?OLS?與企業版相比有部分限制功能,但對于一般的個人博客或小型站點基本夠用。

社區版肯定是免費的,但這并不是重點,你來看看官網給出的?OLS?與?Nginx?和?Apache?的性能對比,我可以猜到你肯定會先是大吃一鯨,然后口水橫流。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片2

好吧,我承認我在流口水,容我先擦一擦,接下來我將如何實現?OpenLiteSpeed?平臺上跑?Laravel?項目的過程分享給小伙伴們,Let's Start !

官網鏈接:https://openlitespeed.org

知識庫鏈接:https://openlitespeed.org/kb/

 

二、安裝 OpenLiteSpeed 很簡單

安裝環境:CentOS 7 (2009)

WEB引擎:OpenLiteSpeed 1.7.8 + PHP 7.4

準備工作:開通防火墻端口

firewall-cmd --zone=public --add-port=7080/tcp --permanent

firewall-cmd --zone=public --add-port=80/tcp --permanent

網上鋪天蓋地都是如何一鍵安裝?OLS?,如果你的應用是?WordPress?,那么恭喜你倒可以參考參考。

因為一鍵安裝可以連帶?WordPress?及其插件一股腦兒地全部搞定,倒是簡單高效。

可是,我雖然是個小白,但我同時又是個完美強迫癥患者,在這里我只用最簡單、直接的方法來安裝。

是的,我要用的正是官方建議的二進制包安裝方法。

知識庫鏈接:https://openlitespeed.org/kb/install-from-binary/

注意,任何安裝時都是需要管理員權限的,如果你是普通用戶,記得用?sudo?。

好了,先將二進制包下載下來,可以到下載頁上下載,也可以直接使用?wget?。

wgethttps://openlitespeed.org/packages/openlitespeed-1.7.8.tgz

我安裝的是官方最新版本?1.7.8?,這個包大概 71.6 MB。

官網下載比較慢,我費了半天勁才下載下來,為了方便小伙伴們,在這我留個國內的備用下載鏈接。

openlitespeed-1.7.8.tgz.zip (70.66M)

下載鏈接:https://www.90pan.com/b2347537

提取碼:tndd

下載好了就可以安裝了,超級簡單有木有。

tar -zxvf openlitespeed-1.7.8.tgz
cd openlitespeed
./install.sh

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片3

全程自動下載、自動安裝,刷刷手機耐心等待。

安裝完成后你就可以看到這句話,表明安裝成功,就是這么簡單。

Installation finished, Enjoy!

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片4

安裝完成后你需要注意一點,安裝程序在最后給出了一個名為?WebAdmin?的初始訪問密碼,如圖中的紅字。

Your webAdmin password is XXXXXXXX, written to file /usr/local/lsws/adminpasswd.

如果你不小心忘記把它記下來了,那么也別擔心,可以在?/usr/local/lsws/adminpasswd?中找到它。

至于?WebAdmin?是什么、怎么用,等一會兒后面會有詳細介紹,你先記下這個密碼吧。

 

三、安裝 PHP

要想用?Laravel?,那么肯定少不了要安裝?PHP?。

a、怎么安裝 php

別看前面安裝?OLS?如此簡單,實際上它已經完成了95%以上的任務。

根據以往?Apache?或?Nginx?等的安裝經驗,緊接著我們應該安裝?PHP?了對不對?

哈哈,其實它已經好好地躺在系統里了,官方目前最新版本可以支持到?7.4?及?8.0?。

在前面的安裝過程中我們也能觀察到,它偷偷幫你裝了?lsphp74?。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片5

b、添加 php 可執行文件到系統路徑中

既然已經裝好了?php?,那是不是我們直接拿來用就行了呢?

No No,實際上我們得到的?php?執行文件并不能在任何目錄下直接執行,這就很不方便了 。

因此我們還是需要再動動手做做后續工作,將它的?php?執行文件加入到系統路徑中。

# 編輯 /etc/profile 文件
vim /etc/profile

# 在文件最后添加一行
export PATH="/usr/local/lsws/lsphp74/bin:$PATH"

# 重新加載
source /etc/profile

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片6

c、php 擴展

PHP?有了,接著如果你想加載更多的?php?擴展,那么可以手動添加它們。

比如想添加?redis?擴展,那么應該這樣子做。

yum install lsphp74-pecl-redis

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片7

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片8

具體每個擴展包的名稱可能與以往傳統的有所不同,可以通過?yum list?查詢來確定。

此外,因為我們用的是二進制包的安裝方法,所以在安裝過程中系統已經自動擁有了?OLS?官方的安裝源,因此可以直接找到并安裝相應的擴展。

如果系統中沒有官方安裝源,則可以手動添加,以?CentOS 7?為例如下。

rpm -Uvh http://rpms.litespeedtech.com/centos/litespeed-repo-1.1-1.el7.noarch.rpm

不同平臺具體可以參考:

https://openlitespeed.org/kb/install-ols-from-litespeed-repositories/
d、確認 php 環境

最后使用終端命令查看?PHP?版本。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片9

再使用?phpinfo?查看更多?php?及其擴展的支持信息。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片10

很棒對不對,我正需要?PHP 7.4?,要知道?7.3?將于2021年年底終止支持哦!

當然,你完全可以安裝多個版本的?PHP?,那樣還可以自由切換不同的版本環境用于測試了。

你可以參考官方的相關知識庫,或者有機會的話我會另外寫一篇文章專門說一說如何安裝多個版本的?PHP?。

 

四、安裝 MariaDB

幾乎任何項目都少不了數據庫,在這里雖然我們只是作為演示,但還是規矩規矩地安裝最新版本的?MariaDB?。

我們采用安裝源的方式來安裝?MariaDB?,打開官網來到下載頁面,在其中選擇好相應平臺及所需版本,按給出的信息保存安裝源文件。

我們要在?CentOS 7?上安裝?MariaDB 10.5?,所以將以下內容保存到?/etc/yum.repos.d/MariaDB.repo?。

# MariaDB 10.5 CentOS repository list - created 2021-02-21 04:48 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.5/centos7-amd64
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片11

什么,你問我怎么保存?

好吧,我曉得你懶,你下載這個,解壓縮后放到?/etc/yum.repos.d/?目錄下就可以了。

MariaDB.repo.zip (1K)

下載鏈接:https://www.90pan.com/b2347535

密碼:u3xc

然后執行以下安裝命令即可開始安裝。

yum install MariaDB-server MariaDB-client

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片12

當然了,如果你直接在?CentOS?上執行?yum?安裝命令也是可以的,只不過獲取到的并不一定是最新版本。

之后就是配置數據庫,因為這不是本文重點,所以就不在此贅述了。

 

五、初識 OpenLiteSpeed 服務

在?CentOS?下,?OLS?的服務名稱為?lshttpd?,所以可以這樣查看它的服務。

systemctl status lshttpd

它還有一個別稱?lsws?,所以也可以這樣查看它的服務。

systemctl status lsws

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片13

那么我們就可以隨意啟動、停止或啟用禁用?OLS?服務了。

# 啟用/禁用服務
systemctl enable lsws
systemctl disable lsws

# 啟動/停止服務
systemctl start lsws
systemctl stop lsws

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片14

 

六、OpenLiteSpeed 大概有哪些配置

OLS?安裝好后,小伙伴們應該會比較關心兩個問題,一個是它被安裝在哪里了,另外一個是它的配置文件在哪里。

如果你是按照前面二進制包的方法安裝的,那么?OLS?的根目錄是?/usr/local/lsws?。

一定要記住這個根目錄,因為之后所有的配置、緩存、應用統統都是以這個根目錄為基礎。

OK,那么接下來的問題就是配置文件,它大體分為兩種。

第一種,是?OLS?服務器級別的主配置文件。

它放在了?/usr/local/lsws/conf/?下面,名字叫?httpd_config.conf?。

/usr/local/lsws/conf/httpd_config.conf

第二種,是虛擬主機級別的配置文件。

在根目錄下專門有個放虛擬主機配置的目錄?/usr/local/lsws/conf/vhosts/?,不同的虛擬主機則以其名稱為子目錄分別保存自己相應的配置文件。

比如我們安裝好?OLS?后它自帶有一個叫做?Example?的虛擬主機,那么它的配置文件就在這兒。

/usr/local/lsws/conf/vhosts/Example/vhconf.conf

不管是服務器級別的主配置文件也好,還是虛擬主機級別的配置文件也好,其中均是參數眾多,設定紛繁復雜。

還好有個好消息,我們不必自己動手修改這些配置文件,官方給小白們提供了一個幫手。

在?OLS?安裝完畢之際,我們就已經擁有了一個名為?WebAdmin Console?的 WEB 形式的控制面板程序,這也是官方建議的最佳配置編輯方式。

它除了幫助我們免于記憶復雜的參數語法外,我感覺有一點對于我們很有用的就是可以一鍵平滑重啟服務。

 

七、對小白友好的 WebAdmin 控制臺

OLS?服務一旦啟動完畢,我們就可以登錄?WebAdmin?了。

注意它是?https?開頭的,另外端口是?7080?。

https://ServerName_Or_IP:7080

還記得前面讓你記住的那個初始密碼嗎?

對了,就是在這里登錄?WebAdmin?用的,登錄進入系統后可以自行修改密碼。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片15

還是那句話,如果你忘記了這個初始密碼,可以用下面這個命令來查看。

cat /usr/local/lsws/adminpasswd

登錄進?WebAdmin?后,我們可以點擊右上角的語言選項,將它改為中文,如果你英文很棒就當我在唱歌。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片16

找到左側導航欄?管理控制臺設置?>?常規?>?用戶?,可修改管理員密碼。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片17

要是記性不好,連修改后的密碼都給忘了咋辦?

好辦,使用以下貼心腳本來重置密碼。

/usr/local/lsws/admin/misc/admpass.sh

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片18

好了,說到這兒必須要強調一下,當我們進入?WebAdmin?后所做的任何修改變動,如果要使其生效,必須要重啟服務。

想到每次都要輸命令來重啟就好煩啊,不過好在?WebAdmin?很貼心啊,它提供了平滑重啟功能,點一下右上角的那個綠色小按鈕就可以了。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片19

 

八、如何導入 Laravel 項目

前面準備了那么多,但到這兒總算是該敲黑板、劃重點了,因為這里多多少少會有些坑。

作為演示,我不打算新建一個?Laravel?項目,而是只將原來的項目整體地遷移到?OLS?上,所以大致可以按以下幾步去走。

1、創建虛擬主機

OLS?安裝完成后默認會生成一個名叫?Example?的虛擬主機,它可以作為測試或參數調整等參考,我個人不建議直接拿它來用。

那么我們最好是自己新建一個,當然了不需要去編輯晦澀難懂的配置文件,直接在控制臺上點鼠標就可以了。

a、創建目錄

在開始點點點之前,我們還是要先新建一些虛擬主機必要的目錄。

假定我想新建一個名叫?sysadm.local?的虛擬主機,那么我至少要建立三個相關的目錄,分別是?conf?、?html?和?logs?。

進入根目錄,使用?mkdir -p?一口氣新建三個子目錄。

cd /usr/local/lsws
mkdir -p sysadm.local/{conf,html,logs}

為了讓?WebAdmin?能夠幫助我們來配置虛擬主機,需要給?conf?這個目錄換個主人。

跑?WebAdmin?的用戶叫?lsadm?,所以新主人就是?lsadm?。

chown lsadm:lsadm sysadm.local/conf

b、新建虛擬主機

好了,準備工作就緒,可以開始使用?WebAdmin?了。

從左側導航欄開始,找到?虛擬主機?>?摘要?,點擊右側加號來添加一個新主機。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片20

給虛擬主機一些必要的參數信息。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片21

在之前我們強調過OLS?根目錄的重要性,在這里也有所體現。

$SERVER_ROOT = /usr/local/lsws/

虛擬主機根目錄(相對路徑于$SERVER_ROOT)

語法:$SERVER_ROOT/$VH_NAME/
例子1$SERVER_ROOT/sysadm.local/
例子2:sysadm.local/

配置文件(相對路徑于$SERVER_ROOT)

語法:$SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf
例子1:$SERVER_ROOT/conf/vhosts/sysadm.local/vhconf.conf
例子2conf/vhosts/sysadm.local/vhconf.conf

當你點擊保存按鈕后,它會提示出錯,說指定的配置文件并不存在。

別怕,其實沒啥大事,直接點擊那個?CLICK TO CREATE?就行了,它會幫你創建好配置文件。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片22

然后再點保存,虛擬主機就創建成功了。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片23

虛擬主機列表中誕生了新的主機,但是這個時候它還是個新生兒還并不完整,因為它的文檔根目錄并沒有指定,沒有文檔根目錄,項目文件放到哪里去???

所以我們接著往前走吧,列表中點擊虛擬主機名稱。

找到?常規?選項卡中的常規一項,再點下右邊的編輯按鈕,輸入文檔根目錄。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片24

文檔根目錄(相對路徑于 $SERVER_ROOT 或 $VH_ROOT 均可)

語法:$VH_ROOT/html
例子:$VH_ROOT/html/public

由于我們使用的是?Laravel?項目,所以根目錄應該設定成?$VH_ROOT/html/public?。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片25

e、啟用重寫設定

虛擬主機列表中點擊主機名稱,找到?重寫?選項,點擊右側編輯按鈕。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片26

然后啟用重寫,并指定自動加載?.htaccess?,保存退出。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片27

2、創建監聽器

這個監聽器簡單地來說,就是用于分析請求來源,以便提供相應的?WEB?響應服務。

我個人的理解是,通常有兩種監聽方式,一種是端口方式,另一種是域名方式。

端口方式很容易理解,同一個IP地址,想要多用戶訪問,那么可以通過連接不同的端口來訪問服務器。

不過我們這里采用另一種監聽方式,就是通過主機域名來訪問服務,這樣就可以通過多個不同域名來訪問同一IP地址同一端口的 WEB 服務。

當然在這里我們只指定一個域名作為演示。

點擊左側導航欄中的?監聽器?,然后點擊右側的添加按鈕。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片28

填寫監聽器名稱,我們這里設定端口為標準?http?的?80?端口,并且選擇不加密連接。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片29

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片30

還沒有結束哦,接著點擊列表中我們剛剛建立的監聽器名稱。

找到下方?虛擬主機映射?一欄,并點擊右側添加按鈕。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片31

選擇我們在前面建立的虛擬主機?sysadm.local?,再填寫我們需要訪問的域名,比如?sysadm.local?。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片32

小伙伴們請注意,這里的域名一定要能夠解析得到。

我們現在只做測試,所以在我們的電腦上可以在?hosts?文件中手動添加解析條目。

比如,將域名?sysadm.local?解析到?192.168.1.x?這個IP地址上。

192.168.1.x sysadm.local

好,監聽器及虛擬主機映射建立好后基本上應該是這個樣子。

用 Laravel 嗎,從 Nginx 切換到 OpenLiteSpeed 的那種-圖片33

3、復制項目文件到虛擬主機根目錄下

復制文件這個不用多說了吧,將原有的?Laravel?項目目錄中所有文件復制到剛才我們建立的虛擬主機文檔根目錄中。

比如:

cp laravel_files /usr/local/lsws/sysadm.local/html/

這里要注意兩個子目錄的權限,這兩個子目錄需要讓?lshttpd?服務有權限訪問,那么務必給它換個主人。

跑?OLS?服務的用戶和組都叫?nobody?,所以新主人就是?nobody?。

chown -R nobody:nobody sysadm.local/html/storage/
chown -R nobody:nobody sysadm.local/html/bootstrap/cache/

4、導入數據庫

這個也不用多說吧,導入數據備份即可。

5、修改?.env?配置文件,并重新加載配置。

修正一些環境參數,比如數據庫的連接信息。

然后最好是重新加載一下配置,比如以下。

php artisan config:cache
php artisan view:cache
composer dump-autoload

6、調整一些雜項

一個項目可能會用到不同的擴展,例如?redis?等等。

這個時候你就要注意看看系統是否正確加載了這些擴展。

還有其他一些參數的設定,比如?PHP?的文件上傳大小,或是腳本執行超時等等。

 

寫在最后

在導入?Laravel?項目的過程中,可能會遇到?404?錯誤,那么你就要檢查一下虛擬主機文檔根目錄是不是指向了?public?目錄。

還有其他一些錯誤啊、打開空白頁面啊等等情況,可能需要你回過頭去再看看哪里做錯了,反正我也是調試了很久才成功,但我保證之前的步驟基本沒問題。

至于優化或緩存的話題,這些對于我這個小白來說太復雜了,有待將來逐個研究破解。

此外還有一個問題,相信有的小伙伴們也應該注意到了,我們建立的這個虛擬主機只跑在了?80?端口上。

傳輸沒有加密心里肯定會有點慌,那如何讓?OLS?虛擬主機愉快地跑在?HTTPS?上呢?

我們下一回再聊。

WeChat@網管小賈 | www.sysadm.cc

]]>
winsxs太大了怎么清理 http://m.bjmhhq.com/129256.html Thu, 12 Dec 2024 10:22:43 +0000 http://m.bjmhhq.com/?p=129256 win系統盤空間越來越少,發現winsxs超大。winsxs太大了,怎么清理呢?

顯然直接刪除這個winsxs文件夾是不行的,這是系統文件夾,直接刪除會造成系統損壞。

那怎么辦,總不能看著他越來越多的占用,越來越肥胖。

經過我不懈努力的爬文章,各種傷腦筋。。。。終于發現了一個解決辦法。

Dism++ 10.1.1002.2一個軟件解決,減肥。

使用法子也很簡單,小白都能操作。運行軟件,看著勾選你覺得需要優化的項目。運行清理即可。

底下有軟件項目地址,直接去下載就行了。

**********************-------------------------

更新日志
解決清理規則誤殺wegane賬號問題(感謝 Tsubasa)
添加新清理規則“NuGet包緩存”
重要提示:此更新僅僅是在Dism++ 10.1.1002.1的基礎上解決了清理規則的一些問題?。?!不要太驚喜。
由于一直在沉迷與UI庫開發,Dism++暫時不會擁有重量級更新。相關新功能以及Bug修復未來計劃解決。

 

https://github.com/Chuyu-Team/Dism-Multi-language/releases/tag/v10.1.1002.2

]]>
網站速度很慢?使用 WordPress 短時緩存(Transients)來優化數據庫查詢和 HTTP 響應! http://m.bjmhhq.com/129247.html Sat, 07 Dec 2024 08:28:05 +0000 http://m.bjmhhq.com/?p=129247 每個人都想要一個速度很快的網站,網站速度越快,用戶停留和點擊頁面或購買產品的時間就越長,加快網站速度的方法之一是開啟緩存,而緩存背后的邏輯就是存儲信息,更具體一點說,就是找到一個比連接數據庫更快的存儲信息的地方。

在 WordPress 中,如果一些復雜的 SQL 查詢或者耗時的 HTTP 請求,其實它們的結果在一定時間內是不變的,那么為了網站速度,如果把這些操作的結果緩存起來,這樣下次進行同樣的 SQL 查詢和 HTTP 請求的時候,就可以直接從緩存中獲取數據,從而可以顯著加快網站的速度,當然一些復雜計算的結果也可以通過該方法進行緩存。+

那么在 WordPress 中如何快速緩存 SQL 查詢和 HTTP 響應呢?這個時候就要用到 WordPress 的短時緩存(Transients)功能。

什么是短時緩存(Transients)

我們知道 WordPress 緩存有多種類型,比如對象緩存、瀏覽器緩存、頁面緩存甚至數據庫緩存,每種類型都有其用途和設置步驟,比如需要安裝插件和更改服務器配置以啟用對象緩存等。

那么今天介紹的 Transients API,是 WordPress 用于在頁面加載期間臨時存儲 WordPress 中的信息,Transients 本身是“短暫的”或“臨時的”意思,那么 Transients API 可以理解為臨時緩存或者短暫緩存的意思,我這里將它翻譯成短時緩存,它是 WordPress 用來緩存一些復雜的 SQL 查詢和運算結果的最簡單的方法。

它給這些需要緩存的數據一個過期時間,并且時間一到就會自動刪除,所以在制作 WordPress 插件的時候,需要存儲一些有一定生命周期的數據的時候,Transients API 就是最好的選擇。

簡單說,Transients 是一種非常強大的工具,它不僅可以用來避免對頁面內容進行不必要的數據庫請求,還可以加快生成復雜標記的速度并加快耗時的第三方 API 請求。

WordPress Transients API 可以與 Redis 緩存完美結合,顯著提升網站性能。下面是具體的步驟,將 Transients API 與 Redis 緩存結合使用:

配置 Redis 緩存

  1. 確保 Redis 服務正在運行 確保你的服務器已經安裝并啟動了 Redis 服務。如果沒有安裝,請先進行安裝并啟動。
  2. 安裝 Redis 插件 安裝并激活 Redis 插件,例如 。
  3. 配置 wp-config.phpwp-config.php 文件中添加 Redis 連接配置:
    php
    define('WP_REDIS_CONFIG', [
        'token' => '',
        'host' => '127.0.0.1',
        'port' => 6379,
        'database' => 1, // change for each site
        'maxttl' => 3600 * 24 * 7, // 7 days
        'timeout' => 1.0,
        'read_timeout' => 1.0,
        'prefetch' => true,
        'split_alloptions' => true,
        'strict' => true,
        'debug' => false,
        'prefix' => 'your-site-' // 緩存鍵前綴
    ]);
    
    define('WP_REDIS_DISABLED', false);
    

使用 Transients 緩存

1. 緩存復雜查詢或 HTTP 請求

例如,要緩存作者的文章瀏覽量總和:

php
function get_author_views($post_author) {
    // 設置緩存鍵
    $cache_key = 'author_views_' . $post_author;
    // 嘗試從緩存中獲取結果
    $cached_views = get_transient($cache_key);

    // 如果緩存中沒有結果,執行數據庫查詢
    if ($cached_views === false) {
        global $wpdb;

        $cached_views = $wpdb->get_var($wpdb->prepare("
            SELECT SUM(meta_value + 0)
            FROM {$wpdb->prefix}postmeta
            LEFT JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}postmeta.post_id = {$wpdb->prefix}posts.ID
            WHERE meta_key = 'views' AND post_author = %d
        ", $post_author));

        // 將結果存儲在緩存中,緩存時間為 1 小時
        set_transient($cache_key, $cached_views, HOUR_IN_SECONDS);
    }

    return $cached_views;
}

2. 清理緩存

當相關數據更新時,清理緩存:

php
function clear_author_views_cache($post_id) {
    $post_author = get_post_field('post_author', $post_id);
    $cache_key = 'author_views_' . $post_author;
    delete_transient($cache_key);
}
add_action('save_post', 'clear_author_views_cache');

你可以直接將我的代碼添加到你的主題的 functions.php 文件中。以下是詳細步驟:

1. 打開 functions.php 文件

找到你當前使用的主題目錄下的 functions.php 文件。通常這個文件位于 wp-content/themes/your-theme/functions.php。

2. 添加緩存函數和清理函數

將以下代碼復制并粘貼到 functions.php 文件中:

php
// 獲取作者文章瀏覽量總和,并使用短時緩存
function get_author_views($post_author) {
    // 設置緩存鍵
    $cache_key = 'author_views_' . $post_author;
    // 嘗試從緩存中獲取結果
    $cached_views = get_transient($cache_key);

    // 如果緩存中沒有結果,執行數據庫查詢
    if ($cached_views === false) {
        global $wpdb;

        $cached_views = $wpdb->get_var($wpdb->prepare("
            SELECT SUM(meta_value + 0)
            FROM {$wpdb->prefix}postmeta
            LEFT JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}postmeta.post_id = {$wpdb->prefix}posts.ID
            WHERE meta_key = 'views' AND post_author = %d
        ", $post_author));

        // 將結果存儲在緩存中,緩存時間為 1 小時
        set_transient($cache_key, $cached_views, HOUR_IN_SECONDS);
    }

    return $cached_views;
}

// 清理作者文章瀏覽量緩存
function clear_author_views_cache($post_id) {
    $post_author = get_post_field('post_author', $post_id);
    $cache_key = 'author_views_' . $post_author;
    delete_transient($cache_key);
}
add_action('save_post', 'clear_author_views_cache');

3. 調用緩存函數

在需要獲取作者文章瀏覽量總和的地方,調用 get_author_views 函數。例如:

php
// 假設你在單個文章頁面上顯示作者的文章瀏覽量總和
$post_author = get_the_author_meta('ID');
$views = get_author_views($post_author);
echo 'Total views: ' . $views;

將這段代碼添加到你的主題模板文件(例如 single.phpauthor.php)中,適合的地方顯示作者的文章瀏覽量總和。

總結

通過將這些代碼添加到 functions.php 文件中,你可以使用 WordPress Transients 來緩存復雜的 SQL 查詢結果,并且在相關數據更新時清理緩存。

]]>
WordPress文章過多導致網站慢卡頓優化方法,禁用SQL_CALC_FOUND_ROWS http://m.bjmhhq.com/129244.html Fri, 06 Dec 2024 14:09:56 +0000 http://m.bjmhhq.com/?p=129244 當我們使用WordPress作為程序時,如果WordPress網站的文章數量超過10萬,即使網站服務器的配置很強大,網站的打開速度基本上也會很慢。這時我們就需要對網站進行優化。

這是因為 WordPress 在查詢文章列表時,默認也會查詢文章數。這對于少量的網站數據應該不會造成任何問題,但是對于大量的文章是不可避免的。慢查詢。主機引用的一位用戶告訴我們,他的網站有40萬篇文章,打開首頁需要一兩分鐘,甚至首頁或文章頁也經常打不開。

WordPress網站查詢慢的原因:WordPress在查詢帖子列表時,默認也會查詢帖子數。使用此方法:get_posts、query_posts 和 WP_Query。get_posts在4.6.1+中沒有使用SQL_CALC_FOUND_ROWS,但是query_posts和WP_Query仍然使用,所以需要優化。

那么如何解決WordPress文章過多導致網站慢的問題呢?

方法一:完全禁用SQL_CALC_FOUND_ROWS,將以下的代碼放到functions.php文件中:

add_action('pre_get_posts', 'miliol_post_filter');

function miliol_post_filter($query) {
    // 確保這個過濾器只在前端的主查詢中應用
    if (is_admin() || !$query->is_main_query()) {
        return;
    }

    // 禁用SQL_CALC_FOUND_ROWS
    $query->set('no_found_rows', true);
}

方法二、如果您還需要查詢文章數,請使用更高效的EXPLAIN方法代替SQL_CALC_FOUND_ROWS,以更高效的方式禁用SQL_CALC_FOUND_ROWS。這里我們使用 EXPLAIN 方法。

具體代碼如下,將以下的代碼放在functions.php文件中。

//優化數據庫慢查詢
if ( ! function_exists( 'miliol_set_no_found_rows' ) ) {
    /**
     * 設置WP_Query的 'no_found_rows' 屬性為true,禁用SQL_CALC_FOUND_ROWS
     *
     * @param WP_Query $wp_query WP_Query實例
     * @return void
     */
    function miliol_set_no_found_rows(\WP_Query $wp_query)
    {
        $wp_query->set('no_found_rows', true);
    }
}
add_filter( 'pre_get_posts', 'miliol_set_no_found_rows', 10, 1 );

if ( ! function_exists( 'miliol_set_found_posts' ) ) {
    /**
     * 使用 EXPLAIN 方式重構
     */
    function miliol_set_found_posts($clauses, \WP_Query $wp_query)
    {
        // Don't proceed if it's a singular page.
        if ($wp_query->is_singular()) {
            return $clauses;
        }

        global $wpdb;

        $where = isset($clauses['where']) ? $clauses['where'] : '';
        $join = isset($clauses['join']) ? $clauses['join'] : '';
        $distinct = isset($clauses['distinct']) ? $clauses['distinct'] : '';

        $wp_query->found_posts = (int) $wpdb->get_var("
            SELECT COUNT(DISTINCT {$wpdb->prefix}posts.ID)
            FROM {$wpdb->prefix}posts
            $join
            WHERE 1=1 $where
        ");

        $posts_per_page = (!empty($wp_query->query_vars['posts_per_page']) ? absint($wp_query->query_vars['posts_per_page']) : absint(get_option('posts_per_page')));

        $wp_query->max_num_pages = ceil($wp_query->found_posts / $posts_per_page);

        return $clauses;
    }
}
add_filter( 'posts_clauses', 'miliol_set_found_posts', 10, 2 );
]]>
主站蜘蛛池模板: 南溪县| 墨竹工卡县| 尼玛县| 望都县| 云龙县| 浮山县| 西畴县| 镇安县| 安仁县| 咸阳市| 双桥区| 卫辉市| 宿迁市| 台南市| 紫金县| 临邑县| 湖口县| 噶尔县| 沂南县| 康定县| 高邑县| 洛扎县| 河曲县| 望城县| 彰武县| 当阳市| 静宁县| 句容市| 合川市| 宜良县| 白银市| 浦东新区| 威远县| 翼城县| 吐鲁番市| 铜梁县| 遂溪县| 瑞昌市| 冷水江市| 台江县| 东平县|