網站開發系列1——服務器環境搭建

  首先,這系列的文章的受衆是剛畢業想作網站開發,或者其餘開發崗位想了解網站開發的入門教程,默認讀者有計算機相關專業基礎,會跳過不少基礎,細節的原理本身百度或者以後我再補充,編程語言自身特徵不會涉及不少。php

  額,仍是簡單自我介紹一下,我,華南農業大學軟件工程專業畢業的理工男,2012年-2014年在廣州一家叫凱蘭高的創業公司工做兩年多,主要是負責Nodejs服務器開發和技術團隊管理,2014年8月本身嘗試創業3個月以失敗了結,2014年12月在南方週末新媒體擔當了大半年的前端開發,開始接觸php開發,2015年8月份離職至今,在一家傳統行業b2b創業公司擔任技術總監,資歷尚淺,也不可能對全部編程語言和軟件都瞭如指掌,理解透徹,講得不對的地方還請你們指出。html

學習目標:前端

  1. 瞭解B/S架構中的服務器概念。
  2. 瞭解有哪些web服務器。
  3. 經過搭建一個hello world網站運行環境,熟悉linux下安裝軟件的流程,理解web服務器通常須要配置什麼信息,web服務器是怎樣跟咱們寫的代碼聯繫起來的。

學習過程java

  • 首先從目標講起,咱們的目標是建立一個網站,一個別人能夠經過網址(URL)訪問的網站,因此網站必須運行在一臺服務器上,爲訪問的用戶提供服務,那麼提供這個服務的機器也叫作web服務器。怎麼理解服務器呢?相對於另外一個名詞PC(我的電腦),通俗一點理解,服務器就是一臺強大的電腦用來提供一些服務而已,而運行在這臺物理機器上的軟件,根據提供的服務不同,咱們也分爲web服務器,數據庫服務器,郵件服務器,緩存服務器,代理服務器等等,而這時候web服務器的叫法也指nginx,apache這類型的軟件。

  • web服務器,也就是網站服務器,顧名思義是提供網站訪問服務的,那麼有哪些能夠擔當web服務器功能的軟件呢?學習JAVA的時候,咱們要安裝tomcat,學習.NET的時候,咱們要安裝iis,學習PHP的時候,咱們要安裝apache或者nginx,對了,tomcatiisapache或者nginx就是咱們所說的web服務器之一。那麼,他們做爲web服務器,到底提供什麼功能呢?

tomcatnode

 

iismysql

 

 

apachelinux

 

 

 

nginxnginx

nginx

  • 爲了說明web服務器的做用,咱們仍是先選擇其中一種編程語言,配置好運行環境,可以訪問並返回數據,再來談web服務器起到的做用。在這裏,我選擇典型的lamp網站技術組合來講明,同時觸類旁通說明其餘類型的web服務器。

   首先,最簡單的hello world網站其實並不須要mysql數據庫,因此從最簡單的開始配置,windows下的能夠直接使用wamp(http://www.wampserver.com/)集成,爲了這個教程,花了666個大洋買了阿里雲的linux服務器,cenos7.0 64位web

  1. 下載apache,http://httpd.apache.org/,能夠下載2.4.18版本的,安裝流程詳細可參考附件sql

apache安裝完畢以後,默認是安裝在/usr/local/apache2,因此爲了可以全局啓動,建立了httpd的硬連接,ln /usr/local/apache2/bin/httpd /usr/local/bin/。

  2. 編程語言是php,先從http://php.net/下載php,最新版本是7.0.0,不過這裏以5.6.16爲例,windows有線程安全和非線程安全版本的,暫時下載線程安全版本的,具體的區別暫不作說明。

安裝php完畢以後,啓動php-fpm,暫時使用默認配置,使用TCP鏈接9000端口,詳細可參考附件

  3. 而後我但願訪問本機地址localhost或者127.0.0.1時,網頁返回hello world字符串顯示到瀏覽器,因此編寫一個文件命名爲index.php

vim /var/www/test/index.php(目錄不存在須要先建立)

1 <?php
2 echo "hello world";

 

  • 好,到了這一步,怎樣把這三者聯繫起來,實現網頁的訪問呢?
  1. 安裝好apache以後,須要啓動httpd服務,直接啓動httpd便可,這時候訪問即出現apache的默認頁面。
  2. 可是怎樣讓默認的訪問頁面,變成剛纔編寫的index.php呢?修改配置,咱們能夠看看apache現有的配置,理解部分。原配置文件在/usr/local/apache2/conf/httpd.conf(若是遇到403權限問題,可參看http://www.th7.cn/system/lin/201507/122784.shtml)。
    Listen 80(監聽端口,可在這裏修改)
    
    User daemon(啓動使用的用戶)
    Group daemon(啓動使用的組)
    
    DocumentRoot "/usr/local/apache2/htdocs"(文檔根目錄,也就是咱們訪問url爲/時指向的文件系統目錄,修改成DocumentRoot "/var/www/test")
    
    <Directory "/var/www/test">(設置對應目錄的訪問權限)
    Options Indexes FollowSymLinks
    
    AllowOverride None
    
    Require all granted
    </Directory>
    
    <IfModule dir_module>(設置默認首頁)
    DirectoryIndex index.html index.php
    </IfModule>
    
    ErrorLog "logs/error_log"(錯誤日誌,修改成ErrorLog "/var/log/apache/error_log.log")
    
    LogLevel warn(日誌等級)
    
    CustomLog "logs/access_log"(正常訪問日誌,CustomLog "/var/log/apache/access_log.log")

     

  3. 給配置文件創建軟連接ln -s /usr/local/apache2/conf/httpd.conf /etc/httpd.conf,從新啓動httpd -f /etc/httpd.conf -k restart,這時候 tail -fn100 /var/log/apache/access_log.log能夠看到訪問200記錄了。

xxx.xxx.xxx.xxx - - [16/Dec/2015:15:57:51 +0800] "GET / HTTP/1.1" 200 26 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"

  4. 輸出的內容是咱們寫的php文件代碼,而不是執行結果,爲何呢?由於php是腳本語言,是須要以前安裝的php解釋執行輸出結果的,因此,下一步就是在apache的配置中,加入php,apache運行php的模式不止一種,這裏使用fastcgi模式,之後再說明其餘模式的作法和原理。去掉如下兩個模塊的註釋,添加上模塊的配置,重啓apache服務器。

  LoadModule proxy_module modules/mod_proxy.so

  LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

<IfModule proxy_fcgi_module>
  ProxyPass "/" "fcgi://127.0.0.1:9000/var/www/test/index.php" enablereuse=on
</IfModule>

總結:

  1. 服務器是一臺性能強大的計算機,專門提供着一種或多種服務。
  2. apache、nginx、tomcat、iis等都是web服務器,都有着類似的功能,但又有着實現原理和對編程語言支持上的不一樣。
  3. web服務器監聽某個端口(通常是80端口),創建HTTP鏈接,接收並分析數據流,有些服務器還會經過集成模塊來處理用戶具體邏輯的請求(例如查詢數據庫並返回數據),解釋(腳本語言php,nodejs都屬於此類,像java自己就已經編譯成class文件了)並執行咱們編寫的代碼,最後把咱們的輸出做爲結果返回到用戶瀏覽器端。
  4. 服務器的配置,通常包含監聽端口,訪問日誌和錯誤日誌的設置,鏈接數的設置,請求的分配或者處理。

      固然,整個配置流程仍是不少小問題要解決的,在解決這些問題的同時,也算是逼着我本身學習提升吧,有問題留下評論,我儘可能解答。不過下一期,我將會作一個大逆轉,1. 我將使用Nginx做爲反向代理服務器,取代apache的位置,採用LNMP架構;2. 我將配置Laravel這個PHP框架,並能夠訪問Laravel的hello world首頁,Larevel也是網站開發使用的框架,而不會從零開始搭建一個網站。

附件:LAMP環境搭建

相關文章
相關標籤/搜索