分類
FreeBSD/Linux

Apache使用.htaccess重導新網域

有時因為網域修改, 需要做網域級的重導, 建議使用 301 配合 .htaccess 的設定來進行, 可以使用以下語法:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.olddomain.com$
RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]

其中的 R=301 是使用了 301重導, 而新舊域名可以參考上面語法, 並且使用了 RewriteRule 將任意內容重導至新網域時, 維持相同的網址.

參考資料: https://wpscholar.com/blog/redirect-old-domain-to-new-domain-via-htaccess/

分類
FreeBSD/Linux

於linux command line下進行主機網路測速

在有 GUI 的環境下, 可以使用 browser 訪問 https://www.speedtest.net/ 進行測速, 若在 linux 下沒有 GUI 與 browser 的狀況下, 進行測速, 一樣使用 speedtest 的服務來測試, 需要這個 speedtest-cli 工具.

這裡將介紹的工具是需要 python runtime 的, speedtest-cli 工具, github 連結:

https://github.com/sivel/speedtest-cli

操作方式有許多種, 最簡便的就是下載執行 (需注意執行安全性, 此列執行無須 root):

curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -

結果就是在主機下執行對應網路速度的速度, 範例結果如下:

很容易理解目前主機的網路速度概況.

其他參數, 例如列出所有測速主機, 使用 –list 如下:

curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python - --list

就會列出許多對應測速主機, 還列出了距離(由近至遠).

Retrieving speedtest.net configuration…
17383) Windstream (Ashburn, VA, United States) [0.98 km]
5132) Shentel Service Company (Ashburn, VA, United States) [0.98 km]
3810) BroadAspect (Ashburn, VA, United States) [0.98 km]
….
9662) Foxtel Broadband (Perth, Australia) [18575.84 km]
2171) Internode (Perth, Australia) [18575.84 km]
3414) Optus (Perth, Australia) [18575.84 km]
17109) Pentanet (Perth, AU) [18575.84 km]
3254) Vodafone Hutchison Australia (PH) (Perth, Australia) [18575.84 km]
22904) Superloop (Perth, Australia) [18575.84 km]
1931) IX Australia (Perth, Australia) [18575.84 km]
10613) Optus (Rockingham, Australia) [18607.31 km]

十分有趣呢.

繼續閱讀:
https://blog.gtwang.org/linux/speedtest-cli-linux-command/
https://askubuntu.com/questions/104755/how-to-check-internet-speed-via-terminal

分類
FreeBSD/Linux

[nginx]Reverse Proxy with Cache SSL fails

一般我們在實作 Nginx 的 Reverse Proxy with Cache 時, 可以參考這篇:

https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/

不過若是 proxy_pass 的 upstream 是 https://example.com/ 時, 會發生以下錯誤:

SSL_do_handshake() failed (SSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure) while SSL handshaking to upstream

從 log 來看, 其實原因很單純, 因為預設往 upstream 的 web request 會使用 ip 的方式連接, 而導致錯誤 (前端收到為 502 bad gateway), 解決方式只需要新增一個值:

proxy_ssl_server_name on;

如此即可, 請參閱:

分類
FreeBSD/Linux PHP

解決停用TLS1.0加密協議更新CURL問題

今天在解一個已停用 TLS 1.0 加密通訊協定問題時, 發現舊的 web server 上的 php curl 無法正常連線, 在 command line 下使用 curl https://xxx.xxx 時, 也會出現:

curl: (35) TCP connection reset by peer

研判為 curl 的原因造成, 由於需要使用 php 中的 curl_xxxx 系列指令與其他 server 的 api 溝通, 所以必須更新對應的模組來解決, 指令如下:

yum update nss curl openssl

更新完成後, 重起 apache 即完成正常呼叫其他 server api 停用 TLS1.0 的加密通訊協議問題.

參考資料:
https://stackoverflow.com/questions/30145089/tls-1-2-not-working-in-curl

分類
FreeBSD/Linux

WIFI AP使用頻道掃描

在設置家用 WIFI AP時, 有時會有收訊好, 但品質不好的問題, 若有線沒有問題的狀況下, 即使 WIFI AP 收訊格數不錯, 也沒有好的品質時, 可以將 wifi 的 channel 和附近訊號較強的 wifi ap 分開, 以達成不會互相干擾導致的寬頻不良狀況.

可以使用工具如下(免費):

Android: Wifi Scanner: https://play.google.com/store/apps/details?id=com.farproc.wifi.analyzer
iOS: AirPort 工具程式: https://itunes.apple.com/tw/app/airport-%E5%B7%A5%E5%85%B7%E7%A8%8B%E5%BC%8F/id427276530?mt=8
Windows: Wireless netview: http://www.nirsoft.net/utils/wireless_network_view.html

利用這些工具可以查找 wifi ap 使用的 channel, 參考訊號較強的 ap channel, 必須分開不互相在同一頻道上, 可減少 wifi ap 互相干擾的狀況, wifi ap channel 的設定, 一般出廠值都會設定在 auto, 也就是自動選擇, 若要進行手動調整, 建議是在訊號不錯的狀況下, 但頻寬表現不良時使用, 沒有必要也不需要手動進行調整.

其中以 wifi scanner 來看:

集中在 1, 11 上, 就可以將自己的 ap 設定在 4, 6, 7 上以分離不同頻道來進行 wifi ap 的傳輸優化.

另外 iOS 的 AirPort 工具程式, 要到設定裡, AirPort 中的 Wi-Fi 掃描器打開(預設為關閉), 就可以在不用 JB 的狀況下掃描 wifi ap 的頻道.

參考資料:

https://www.accessagility.com/blog/free-wifi-scanner-for-iphone-and-ipad-without-jailbreak

https://www.technonutty.com/2016/04/wifi-analyzer-channel-scanner.html

分類
FreeBSD/Linux

使用wget進行網站用戶驗證方式

今天在設定一個排程作業, 要起動一支程式, 不過該 url 有限定使用 www 驗證的方式, 所以在排程中, 就要給定對應的帳號密碼.

查了一下資料, 可以使用以下語法:

wget [ur] --user=[user] --password=[password]

這樣就可以了, 其實還蠻容易理解與設定.

參考資料:
http://stackoverflow.com/questions/4272770/wget-with-authentication
http://www.ewdna.com/2012/04/wget.html

PS. 若是不要下載檔案, 可以使用 -O (大寫)用來指定輸出檔案至 /dev/null 即可.

分類
FreeBSD/Linux

apache deny ip設定

想要將 apache 的站台, 拒絕讓某個(某群ip)存取的方式, 有幾個方法, 其中最單純最俱體的方式就是直接利用 <Directory></Directory> 這個 tag 中的限制存取來操作最為單純方便 (當然, 虛擬主機可不行, 可以直接利用 .htaccess 設定該層目錄的存取權限)

一般來設, 設定如下:

<Directory "/usr/home/website1">
  order deny,allow
</Directory>

這樣即可. 就是判斷 deny , 預設為 allow 的條件, 也就是所謂公開站台的設定, 若有要限制某些 ip 存取, 可以這樣下:

<Directory "/usr/home/website1">
  order deny,allow
  deny from 1.2.3.4
  deny from 11.22.33.
</Directory>

其中的 deny from 1.2.3.4 是限制某個單一 ip, 而 deny from 11.22.33. 是指 11.22.33.* 都是拒絕存取的, 如此一來, 便能有效管理不想讓某些 ip (例如爬蟲類或是一些吃資源的 ip, 又或是攻擊的 ip)訪問做好限制.

不過發生了一個有趣的狀況, 也就是之前設了, 發現沒有用, 在多次交叉比對檢查後, 發現是這個原因, 就是在 <VirtualHost> 內的 DocumentRoot 指定為 /home/website1 而在 <Directory> 內的目錄指向是 /usr/home/website1 , 這樣一來, apache 在存取該 website1 的檔案時, 是走 /home/website1 下的檔案, 雖然和 /usr/home/website1 一樣, 不過對 apache 來說卻是不同, 這個要特別注意才行, 否則可能會有設定好的 <Directory> 的限制 ip, 但實際上沒有作用, 原因就有可能發生在這裡了.

又或反過來說, 設定的路徑一定要一致, 而且儘量用完整路徑, 不要用簡化的 link 路徑指向檔案, 也比較容易除錯一些. 所以原則上是這樣的:

<VirtualHost *:80>
  ServerName test.diary.tw
  Document /usr/home/www/test
.....
</VirtualHost>

<Directory "/usr/home/www/test">
  order deny,allow
  deny from 1.2.3.4
</Directory>

這樣就 ok 啦, 千萬要注意紅字部分要一致的這件事, 否則可能設了沒有作用, 原因就在這裡了..

另外補充一下, 若是這種方式限制存取的話, client 會拿到 403 的存取失敗代碼.

分類
FreeBSD/Linux

ssh登入緩慢問題

最近的一次更新, 讓 FreeBSD 主機在登入時, 速度變得很慢, 這對操作上有蠻大的影響, 於是問了同事, 也著手進行查詢相關的可能, 原來是 OpenSSH 的名稱反查問題, 簡單處理方式如下:

修改 /etc/ssh/sshd_config 檔內的一個 UseDNS 參數, 設為 no 即可.

官方說明連結: http://www.openssh.org/faq.html#3.3

3.3 – ssh(1) takes a long time to connect or log in

 

Large delays (more that 10 seconds) are typically caused a problem with name resolution:

  • Some versions of glibc (notably glibc 2.1 shipped with Red Hat 6.1) can take a long time to resolve “IPv6 or IPv4” addresses from domain names. This can be worked around with by specifying AddressFamily inet option in ssh_config.
  • There may be a DNS lookup problem, either at the client or server. You can use the nslookup command to check this on both client and server by looking up the other end’s name and IP address. In addition, on the server look up the name returned by the client’s IP-name lookup. You can disable most of the server-side lookups by setting UseDNS no in sshd_config.

下面還有如何判定是 “slow”

CPU Time (SSHv1)[1] Time (SSHv2)
170MHz SPARC/sun4m 0.74 sec 1.25 sec
236MHz HPPA/8200[2] 0.44 sec 0.79 sec
375MHz PowerPC/604e 0.38 sec 0.51 sec
933MHz VIA Ezra 0.34 sec 0.44 sec
2.1GHz Athlon XP 2600+ 0.14 sec 0.22 sec

參考看看吧!

分類
FreeBSD/Linux

找指定檔案內容的語法

在 Linux, FreeBSD 下若要指定目錄以下的檔案內容查詢的指令, 可以利用 find 配合 -exec 參數, 再配合 grep 指令即可達到目的.

使用方式如下:

find . -name “*.log” -exec grep Virtual {} \;

這個方式就以 . 目錄以下, 找出所有 .log 的檔案, 內容有含 “Virtual” 的行內容, 但要注意最後方的 semicolon (分號) 要以反斜線開頭, 才會被 -exec 認識.