Category: Tech

  • How to install PHP 7.4 on FreeBSD 12

    一直以來我都使用源代碼編譯的方式安裝php,一方面是因為Centos上yum的php版本比較舊,源代碼編譯比較適用於各種類unix平台,另外一方面是因為有時候需要加入第三方的模塊,比如pagespeed的時候,就必須從源代碼進行編譯,但是,FreeBSD一直都不支持pagespeed,所以,其實使用pkg自帶的版本就足夠好用了。

    安裝的命令很簡單:

    pkg install php74 php74-zlib php74-exif php74-gd php74-mbstring php74-xml php74-pdo_mysql php74-mysqli php74-curl php74-opcache php74-intl php74-sockets php74-zip php74-openssl php74-bz2 php74-pecl-redis php74-session php74-json php74-dom php74-fileinfo php74-simplexml php74-simplexml php74-pdo_sqlite php74-iconv php74-pecl-imagick-im7 php74-filter

    如果有需要其他的模塊,繼續在後面添加就可以。

    我一般會對/usr/local/etc/php.ini做如下一些修改:

    post_max_size = 22M

    upload_max_filesize = 20M

    date.timezone = Asia/Taipei

    opcache.memory_consumption=32
    opcache.blacklist_filename=/root/sh/opcachebl.txt

    當你不想為所有的php script啟用opcache的時候,你可以把那些目錄加入黑名單,這樣你可以節省很多內存。

    有一些pkg中沒有的so,phpize安裝後,需要在/usr/local/etc/php 目錄中新建一個extension.ini,並添加例如
    extension=imagick.so

    如果服務器內存足夠大,那麼我們可以使用redis作為session handler,將php的session放入內存,比直接扔在磁碟上的效率要高不少,針對php.ini需要修改兩處:

    session.save_handler = files 修改為
    session.save_handler = redis

    同時,session.save_path = “/tmp”
    修改為session.save_path = “tcp://127.0.0.1:6379?auth=ifyouhaveapassword”

    如果redis-server沒有設置密碼,那麼後面就不需要添加。

    好吧,其實是因為使用源代碼編譯intl模塊在FreeBSD上怎麼都過不去,看起來似乎是一個bug,而且是幾年前的bug,粗略的尋找了一下,沒有找到答案,也許以後可以解決這個問題。

  • Blocking aggressive crawlers/scrapers/bots

    有很多人喜歡用Blocking UA的方法,但很幸運的是,如果你使用了CF的CDN服務,那麼Cloudflare為我們提供了防火牆功能。

    當你把你的網站放在CF的CDN後面,有許多增強的安全設置可以為我們所使用,其中一個就是根據UA來進行處置,Block或者Challenge,使用Challenge選項時,會首先到達一個驗證碼頁面,這個頁面,在大陸由百度雲加速提供,除大陸地區,由CF自己提供,這個Challenge頁面非常類似於常用的抗DOS設備的跳轉頁面,需要輸入驗證碼,或是使用js檢測瀏覽器完整性後,才會將用戶側瀏覽器傳遞到目的url。

    但是,很多時候,一些非正式的bot,使用了各種千奇百怪的UA,比如華為和阿里巴巴,你們又沒有搜索引擎,抓來抓去抓什麼呢?這種時候,我覺得UA非常煩擾,於是我通常會將16位的B類地址段直接設置為需要Challenge,通常來講,既然它是bot,它就不可能完成Challenge。當然,還有一些俄羅斯和法國的惡意bots,通常也會加到Challenge的範圍,由於俄羅斯的實在是太多,乾脆就直接把Russia加進去。

    通過以上的一些設置,整個服務器的負荷就小了很多,訪問量變成高峰期的三分之二左右。

  • 使用策略路由只適用於主要流量為國內流量的場景

    大陸A股一瀉千里,我已經浮虧二十萬,好刺激,但還沒到我浮虧最多的時候,最多的時候曾經浮虧三十萬。

    你看吧,我說要開始扣屎盆子了吧,趙立堅剛把屎盆子試圖扣在美國頭上,川普就直呼Chinese virus,不過這也許是學習俄羅斯的網軍,用各種陰謀論搞亂信息來達到目的。

    一個星期買一次蔬菜,每天在家洗菜煮飯燒水,我發現這個淨水器的廢水丟掉有點浪費,於是把他們收集起來,放到魚缸的儲水桶,爆氣兩天之後再給魚缸換水,好像還蠻不錯,我發現這個洗米水似乎有點營養過剩,倒在戶外水草缸裡面沒兩天居然臭了,水草也開始腐爛,趕緊下了一些硝化細菌和光合細菌,也許是天氣比較寒冷凍死了水草,總之就是臭了,在戶外水草缸裡面種植菠菜也宣告失敗,應該是太冷的緣故,還有根鬚都被菜農摘掉,很難存活。

    雖然天氣並不是很熱,也不是很冷,戶外的水草缸裡面已經開始有蚊子或是蒼蠅下蛋了,水裏遊動著小蟲子,我就把餓了很多天的虎皮魚丟進去,吃得差不多再撈回室內的魚缸。

    我原本想用策略路由,把出國流量直接丟到旁路網關去,但是我發現這樣做的話,過個一兩天就會產生防火牆CPU負荷滿載的問題(雖然滿載並沒有什麼影響),似乎是奈飛的流量導致,我還沒搞清楚這個問題所在。

    set vrouter “trust-vr”
    set match-group name goto-vpn
    set match-group goto-vpn ext-acl 10 match-entry 1
    set action-group name act-goto-vpn
    set action-group act-goto-vpn next-hop 172.16.254.254 action-entry 10
    set pbr policy name po-goto-vpn
    set pbr policy po-goto-vpn match-group goto-vpn action-group act-goto-vpn 10

    set access-list extended 10 src-ip 172.16.254.0/24 dst-ip 72.0.0.0/8 src-port 1-65535 dst-port 1-65535 protocol any

    Juniper ScreenOS 6.2

    如果在主路由上使用策略路由,那麼理論上來說,第一跳到旁路網關適用於主要流量為出國流量的環境,第一跳到主路由適用於主要流量為國內流量的環境,否則就會產生大部分流量需要兩跳的結果,我想了想,改回了第一跳到旁路網關。