Nginx從安裝到入門,基礎篇

Nginx HTML CentOS GCC 安卓網hiapk 2017-05-23

作為一個前端開發人員,懂點服務器端的知識也是必不可少的,畢竟,我們可不想為了做一個簡單的測試還得去麻煩別人,自給自足,沒什麼不好。如果你有時間和精力,向全棧邁進也未嘗不可。

我最近正在做一個仿iOS端微信的聊天App-WChat,從前端到後臺,全都是靠自己來實現。所以最近也接觸了一些服務器知識,後面還準備了一篇關於Node.js的文章。該項目的WebSocket是通過Node.js來實現的,後期的數據請求可能也是基於Node.js實現。

Nginx介紹

Nginx(engine x)是一個高性能的HTTP服務器(其實不止HTTP服務器),一般主要用作負載均衡反向代理(如果你不清楚什麼是反向代理,可以閱讀我的另一篇文章)。

Nginx有一個主進程和很多工作進程,主進程的作用只有一個:通過讀取配置文件(nginx.conf)來維持工作進程正常工作。工作進程對應的才是實際的請求(request),Nginx會自動將客戶端的請求高效的分發給工作進程。工作進程的數量在配置文件中定義,或者通過CPU的核心數自動調整。(可參考官方文檔)

在Linux系統下,Nginx的配置文件默認在/usr/local/nginx/conf/nginx.conf/etc/nginx/nginx.conf/usr/local/etc/nginx/nginx.conf中。我是在CentOS系統下使用的Nginx,本篇就基於CentOS來介紹。

Nginx安裝

對於Nginx的安裝,官方的文檔在這裡,建議參閱官方說明(比較考驗英文)。我是一路上踏過很多坑才把Nginx安裝好(主要是由於Nginx版本和Linux版本都在不斷更新,而百度出來的大多數教程都是過時的,或多或少都會有些問題)。

yum安裝

推薦使用yum來安裝,簡單省事。官方鏈接

方法很簡單,首先創建/etc/yum.repos.d/nginx.repo文件,然後寫入以下內容:

[nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1

其中的OS是你的Linux版本,我的是centos,直接替換就好。OSRELEASE是版本號,6.x就寫6,7.x就寫7。比如我的baseurl就是http://nginx.org/packages/centos/6/$basearch/

然後就可以直接使用yum install -y nginx命令來一建安裝,搞定。

通過yum安裝的Nginx的配置文件可能位於/etc/nginx/nginx.conf

源碼安裝

不推薦使用這種方法,對於新手來說太折騰了。首先要安裝依賴包:gccg++PCREzlibopenSSL

安裝依賴

  • 安裝gccg++,用來編譯源碼;
$ yum install -y gcc gcc-c++
  • PCRE,Perl正則表達式;
$ yum install pcre pcre-devel
  • zlib,gzip壓縮;
$ yum install zlib zlib-devel
  • OpenSSL,SSL協議。
$ yum install openssl openssl-devel

如果你愛折騰,這些依賴包也可以下載源碼,通過編譯來安裝。這裡最頭疼的就是版本之間的差異,涉及到的依賴包太多,有時候版本之間就會不兼容,或者需要其他的一些配置。

安裝Nginx

去官網下載Nginx,最好不要下載最新版本,如果最新版本跟網上大多數教程說的有差異的話,真的很折騰人。

Linux下命令行操作:

# 下載源碼 $ wget http://nginx.org/download/nginx-1.13.0.tar.gz  # 解壓源碼 $ tar xvf nginx-1.13.0.tar.gz  # 進入源碼目錄 $ cd nginx-1.13.0 # 配置、編譯、安裝 $ ./configure $ make $ make install

如果順利的話,Nginx就已經安裝完成啦。如果不順利的話,就自行百度去或直接採用上面介紹的yum來安裝。./configure命令可以帶很多參數進行配置,我記不住那麼多,需要的話還是自行百度。

這就是安裝Nginx大概的流程,先安裝依賴,再安裝Nginx。不同系統不同版本之間可能會有差異,按照上面的方法你也不一定會成功。起初我在./configure這一步就總是失敗,就算帶上詳細的參數(--sbin-path之類的)也是失敗。

Nginx基本使用

如果你已經成功安裝Nginx,那麼你現在直接在命令行中敲入nginx,然後回車,即可啟動Nginx服務器。這時,你就可以在客戶端輸入你服務器的IP地址,就可以訪問服務器默認的頁面了。

啟動、停止、重新加載配置信息

啟動Nginx之後,你就可以使用下面的命令格式進行簡單的操作了。

$ nginx -s signal

其中,signal可以是以下指令:

  • stop:關閉Nginx,會立刻終止所有的客戶端請求。
  • quit:關閉Nginx,直接翻譯過來就是優雅的關閉。它會等當前所有的請求完成之後再關閉Nginx。
  • reload:重新加載配置文件。一般當你修改配置文件後,使用它可以讓修改的配置生效。
  • reopen:重新打開日誌文件,目前還沒用到它。

官方還介紹了通過kill指令來向Nginx進程發送這些操作信號。

配置文件簡單說明

打開配置文件vim /usr/local/nginx/conf/nginx.conf,文件結構大致如下:

http {     server {         listen  80;         server_name www.mohng.com;          location / {             root    html;             index   index.html index.htm;         }          location /wchat {             root    html;             index   index.html;         }     }      server {         listen  8080;         serer_name  mail.mohng.com;          location / {             index index.html;         }     } }

其中,一個server就相當於一個服務器,你可以配置多個server模塊來虛擬多個服務器。listen表示該服務器監聽哪個端口,默認是80端口。server_name表示匹配主機名,比如我的server_namewww.mohng.com,那麼,當客戶端通過域名www.mohng.com(前提是該域名已經正確解析到該服務器的IP地址)來訪問的時候,就是匹配到這個服務器。如果客戶端通過域名mail.mohng.com:8080來訪問的時候,就會匹配到下面那個服務器。如果你通過IP直接訪問,會默認訪問第一個服務器。

location就是匹配的路由,root是返回給客戶端資源文件的根目錄,它是相對nginx路徑的,也可以指定絕對路徑(比如:/usr/local/nginx/www)。index就是默認返回的文件名(比如index.htmlindex.phpindex.asp等)。

配置簡單的反向代理服務器,只需在匹配到的路由location模塊中,使用proxy_pass來轉到真實的服務器。

location / {     proxy_pass http://www.baidu.com; }

更多配置文件的詳細說明請參閱官方文檔。

總結

其實,Nginx本身不難,難的是操蛋的英文。現在大多數工具、框架、技術文檔,都是大篇大篇的英文,看起來實在痛苦。就比如ReactVue,我相信在國內,學好Vue比學好React要容易的多吧。

不管什麼東西,最好的學習途徑還是官方文檔,畢竟,官方的文檔永遠都是最新的。就拿webpack來說,現在網絡上大部分教程都還是基於1.x的,如果直接拿來在2.x中使用全是坑。

相關推薦

推薦中...