天天看點

使用hta操作nginx停止、重新開機

這裡算是總結一下,這兩天的工作,也是自己動手嘗試并實作了自己的想法一個案例。

情況大緻是這樣的:

新上線的webgame需要做一個官網,做好了并上線了(切割、程式、背景,背景使用是java版本的jeecms),但僅僅是自己家的官網做好了,現在上面的想法是需要把這個官網也整理成一個本地能運作的網站給其它遊戲的聯合營運商以便減少他們工作量(需要全部靜态化,所有絕對位址必須改成相對的,圖檔也必須請求本地指定目錄)。最初隻是說把當時切割好的靜态頁面給他們,後來覺得不是很好的一種方案,希望一些不會變的頁面,如:遊戲的攻略、玩家、常用活動、排行、熱門道具等,将這些頁面也弄成一個靜态的,這樣聯合營運商就不再需要進行編輯。當準備開始做的時候面臨的問題:

1、靜态頁裡面沒有資料,即内容模闆頁content.html中的内容為空;

2、如果便于對整個靜态網站的控制,例如:頭部、左側、底部、導航隻需要改一處其它所有頁面都可以應用并生效;

3、很多文章中的圖檔是來自主站的,或是自己在背景上傳的,如何抓取這些圖檔并在相應的内容頁進行替換;

應對方案:

1、寫個爬蟲程式,抓取線上所有的靜态頁面;

2、将共用的部分使用nginx的ssi include文法包含進去;

3、先抓取所有圖檔,保留其字尾,然後用editplus打開所有檔案,用一個正則進行全局替換;

但在第一點與第二點上有一個沖突點,什麼沖突點?既然是靜态頁面,背景生成的時候靜态頁的時候已經沒有include,看到的全部是字元串了,因為nginx已經處理過了。

這樣隻能繞開請求靜态頁,讓爬蟲抓取動态頁面(需要修改nginx的nginx.conf配置,在請求背景接口時關閉ssi---ssi off;),在模闆中使用ssi include文法嵌入共用頁。例如文章編輯完成後,背景有一個預覽位址:abc.jsp對應前台通路位址頁為abc.html,抓取abc.jsp裡面的内容,這個時候就能得到如下的内容:

<html>

<!—#include virtual=”….html”—>

..

</html>

然後根據請求的位址,儲存為相應的目錄層次關系,檔案名保留,字尾名為.html

<a href="http://images.cnblogs.com/cnblogs_com/meteoric_cry/201105/201105112030405845.png"></a>

到這裡,似乎應該能正常工作了,但還沒有完,來了新問題。前面使用ssi include共用頁,例如nav.html,這個頁面可能有引用一些css、js,它的連結位址寫的也是相對的,這樣會導緻請求這些檔案時路徑不對,出現404,而這個還不是重點,最要命的是nginx裡不支援&lt;!—#include virtual=”../nav.html”--&gt;這樣的寫法,會在nginx的logs目錄下的error.log檔案中輸出unsafe uir的資訊(相對目錄”./”它是支援的),如下圖所示:

<a href="http://images.cnblogs.com/cnblogs_com/meteoric_cry/201105/201105112030572732.png"></a>

這下可真沒得玩了,我隻再寫程式将所有include的地方寫成“/”(根目錄)了,如果有聯合營運商要修改,我大不了修改一個正則,然後重新生成一個打封包件。因為include使用提“/”是以裡面請求css、js的路徑可以使用相對的也沒問題。

到此為止,“全靜态”的遊戲官網能正常跑起來了。(關于圖檔的處理方案,上面已經寫過了)

這個時候把這zip包如果發給其它聯合營運商,它們在本地是無法跑起來了,因為裡面有include,我的想法是希望有個小應用程度,接收的人輕按兩下一下點選後就能直接浏覽遊戲官網了。這是我的想法,到這裡才回到這篇文章的标題上來。

用.net寫一個windows應用程式,還是用hta處理呢,想了一下還是使用hta寫了,雖然之前用.net寫過類似的windows應用程式(選擇指定目錄,查找這個檔案夾下所有execl中每一個sheet中每一個單元格是否包含需要查找的字元串并記錄下,運作完後打開一個html頁,html内容上需要顯示比對到的行、列和excel檔案連結等資訊)。

用.hta有個問題就是在裝有360的機器上會不停的通路是否要運作此應用程式,比較讨厭~(反正我機器啥“殺毒”的軟體也沒裝)

初步有想法:

2、讀取nginx目錄下的nginx.conf檔案,修改兩處:server_name、root

第一步還好解決,部分代碼如下:

有了上面的思路,修改nginx.conf也就很容易了。但是我在處理nginx的停止、重新開機的時候遇到了問題。

我先在nginx的目錄下弄了兩個bat批處理檔案:restart.bat、stop.bat檔案,如下圖所示:

使用hta操作nginx停止、重新開機

stop.bat裡面的内容:

nginx.exe -s stop

nginx.exe -s quit

restart.bat裡面的内容:

nginx.exe -s reload

start nginx

之後我嘗試使用下面的方法直接調用兩個bat:

這裡隻需要做兩點:

1、切換到nginx所在的盤符,不确定那個zip會在哪個盤解壓出來

2、再切換到nginx所在的目錄

對應的兩條指令是:

cd %~d0

cd %~dp0

這樣我再試的時候就OK了,達到要求了。

hta運作效果如下:

使用hta操作nginx停止、重新開機

但仍需要注意的問題:

1、解壓的zip檔案不能放在中文目錄下,因為nginx會啟不來;

2、nginx.conf的預設配置需要事先開啟對ssi的支援,如果不開啟,打開遊戲官網凡有include的地方就空白了,隻需要加二行就OK了

ssi on;

ssi_silent_errors on;

3、如果裝有一些防護軟體的機器上,在運作hta檔案時需要允許它運作,不然沒得完了。

到此為止,想法才算完整的實作了:隻需要點選按鈕就可以在本地預覽官網,無論你将它放在磁盤哪個地方(除了不能放在中文目錄下)。

完整的hta代碼:

&lt;/script&gt;

&lt;/body&gt;