1. 程式人生 > >前端必備的Nginx學習

前端必備的Nginx學習

由於機緣巧合,認識了一些朋友,給我介紹了搬瓦工的網站。買了一個國外的伺服器,既可以FQ又擁有了一個搭載 Centos 6 的伺服器。一年19.99美元,摺合人民幣也就130左右,一鍵搭建。有興趣可以點選瞭解詳情

很久之前就看到胖哥,出了關於nginx 的教程,今天來根據他的教程在買的 linux 伺服器上面搭建 nginx。

連線 linux 伺服器在這裡我是用了 xshell6xftp6。可以直接到官網填個郵箱,然後官方會發給你郵箱分別的下載地址。或者你覺得懶的,可以直接點選我的百度雲盤下載

瞭解Nginx和環境準備

Nginx是什麼?

Nginx (engine x) 是一個高效能的

HTTP反向代理服務,也是一個IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0釋出於2004年10月4日。

Nginx是一款輕量級Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站使用者有:百度、京東新浪網易騰訊淘寶等。(以上內容來自百度百科

Nginx的優點

  • 支援海量高併發:採用IO多路複用epoll。官方測試Nginx能夠支援5萬併發連結,實際生產環境中可以支撐2-4萬併發連線數。
  • 記憶體消耗少:在主流的伺服器中Nginx目前是記憶體消耗最小的了,比如我們用Nginx+PHP,在3萬併發連結下,開啟10個Nginx程序消耗150M記憶體。
  • 免費使用可以商業化:Nginx為開源軟體,採用的是2-clause BSD-like協議,可以免費使用,並且可以用於商業。
  • 配置檔案簡單:網路和程式配置通俗易懂,即使非專業運維也能看懂。

使用yum安裝

yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim

分別使用上面的指令安裝,安裝完成後會顯示安裝了什麼依賴,大概下面的樣子

Installed:
  httpd-tools.x86_64 0:2.2.15-69.el6.centos             vim-enhanced.x86_64 2:7.4.629-5.el6_8.1            
  wget.x86_64 0:1.12-10.el6                            

Dependency Installed:
  apr.x86_64 0:1.3.9-5.el6_9.1                           apr-util.x86_64 0:1.3.9-3.el6_0.1                 
  gpm-libs.x86_64 0:1.20.6-12.el6                        vim-common.x86_64 2:7.4.629-5.el6_8.1             
  vim-filesystem.x86_64 2:7.4.629-5.el6_8.1    

上面的過程主要安裝了一些linux系統下面的編譯器以及一些服務或者是相關便於linux使用的內容。有興趣的可以一個一個百度瞭解

建立目錄

根據個人喜好,喜歡整理的就建立一下,自己為例

cd / # 進去 '/' 資料夾
cd root # 進去 'root' 資料夾
ls # 顯示 root 資料夾裡面的檔案
mkdir lbh # 建立lbh資料夾
cd lbh # 進去 'lbh' 資料夾
mkdir app # 建立app資料夾
mkdir backup # 建立backup資料夾
mkdir download # 建立download資料夾
mkdir logs # 建立logs資料夾
mkdir work # 建立work資料夾
ls # 顯示 lbh 資料夾裡面的檔案
# app backup download logs work

也可以使用xftp進去可視的建立和檢視

建立目錄

Nginx的快速搭建

Nginx版本說明

開啟nginx官網的下載頁面,可以看到以下幾個版本

  • Mainline version :開發版,主要是給廣大Nginx愛好者,測試、研究和學習的,但是不建議使用於生產環境。
  • Stable version : 穩定版,也就是我們說的長期更新版本。這種版本一般比較成熟,經過長時間的更新測試,所以這種版本也是主流版本。
  • legacy version : 歷史版本,如果你需要以前的版本,Nginx也是有提供的。
yum list | grep nginx # 檢視yum中是否已經有 nginx

如果不存在,或者不是需要的版本,可以自行配置。從官網的 stable 版本可以得下以下程式碼

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

建立 yum源

先用vim 編輯器建立一個 yum 源,關於 yum源的解釋,可以簡單理解為:repo檔案即是Linux中常說的原始檔(repositry),在使用yum命令的時候系統會自動讀取repo檔案,然後去repositry獲取軟體。每一個repo檔案代表不同的軟體源,其中的baseurl,表明了repositry的地址,支援ftp協議,http協議和file協議。其他具體的請自行百度。

vim /etc/yum.repos.d/nginx.repo

接著會彈出一個介面,按 i(insert),複製貼上剛剛的程式碼。修改其中的一些程式碼

baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/

OS對應你係統,我的是 centos,OSRELEASE是版本號,改為 6。完整改完

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

接著按esc退出編輯狀態,並輸入 :wq進行儲存。yum源就建立好了。接著重新輸入

yum list | grep nginx # 檢視yum中是否已經有 nginx
#可以得到
nginx.x86_64                               1.14.1-1.el6.ngx              nginx  
nginx-debug.x86_64                         1.8.0-1.el6.ngx               nginx  
nginx-debuginfo.x86_64                     1.14.1-1.el6.ngx              nginx  
nginx-module-geoip.x86_64                  1.14.1-1.el6.ngx              nginx  
nginx-module-geoip-debuginfo.x86_64        1.14.1-1.el6.ngx              nginx  
nginx-module-image-filter.x86_64           1.14.1-1.el6.ngx              nginx  
nginx-module-image-filter-debuginfo.x86_64 1.14.1-1.el6.ngx              nginx  
nginx-module-njs.x86_64                    1.14.1.0.2.5-1.el6.ngx        nginx  
nginx-module-njs-debuginfo.x86_64          1.14.1.0.2.5-1.el6.ngx        nginx  
nginx-module-perl.x86_64                   1.14.1-1.el6.ngx              nginx  
nginx-module-perl-debuginfo.x86_64         1.14.1-1.el6.ngx              nginx  
nginx-module-xslt.x86_64                   1.14.1-1.el6.ngx              nginx  
nginx-module-xslt-debuginfo.x86_64         1.14.1-1.el6.ngx              nginx  
nginx-nr-agent.noarch                      2.0.0-12.el6.ngx              nginx  
pcp-pmda-nginx.x86_64                      3.10.9-9.el6                  base  

可以看到1.14.1的nginx,接著安裝

yum install nginx

安裝完成後,輸入

nginx -v # nginx version: nginx/1.14.1

有版本號就是已經安裝完成了。

Nginx基本配置檔案詳解

在使用yum安裝完Nginx後,需要知道系統中多了那些檔案,它們都安裝到了那裡。可以使用下面的命令進行檢視:

rpm -ql nginx

rpm 是linux的rpm包管理工具,-q 代表詢問模式,-l 代表返回列表,這樣我們就可以找到nginx的所有安裝位置了。可以看到以下的內容

nginx安裝目錄

nginx.conf

nginx.conf檔案是Nginx的總配置檔案,在我們搭建伺服器的時候需要經常調整的檔案。

進入 etc/nginx目錄下,用vim開啟

cd /etc/nginx
vim nginx.conf

下面是檔案的註釋

user  nginx; # 執行使用者,預設是nginx,可以不進行設定
worker_processes  1; # nginx 程序,一般設定為和CPU核數一樣
error_log  /var/log/nginx/error.log warn; # 錯誤日誌存放目錄
pid        /var/run/nginx.pid; # 程序 pid 存放位置

events {
    worker_connections  1024; # 單個後臺程序的最大併發數
}


http {
    include       /etc/nginx/mime.types; #副檔名與型別對映表
    default_type  application/octet-stream; #預設檔案型別
    # 設定日誌模式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main; # nginx 訪問日誌存放位置

    sendfile        on; # 開啟高效傳輸模式
    #tcp_nopush     on; # 減少網路報文段的數量

    keepalive_timeout  65; # 保持連線的時間,也叫做超時是啊金

    #gzip  on; # 開始 gzip壓縮

    include /etc/nginx/conf.d/*.conf; # 包含的子配置項位置和檔案
}

default.conf

可以看到最後有一個子檔案的配置項,那我們開啟這個include子檔案配置項看一下里邊都有些什麼內容。

[[email protected] ~]# cd /etc/nginx
[[email protected] nginx]# vim nginx.conf
[[email protected] nginx]# vim default.conf
[[email protected] nginx]# ls
conf.d          koi-utf  mime.types  nginx.conf   uwsgi_params
fastcgi_params  koi-win  modules     scgi_params  win-utf
[[email protected] nginx]# cd conf.d
[[email protected] conf.d]# ls
default.conf
[[email protected] conf.d]# vim default.conf

通過以上指令進入 conf.d資料夾,然後用 vim 編輯器開啟 default.conf,得到以下檔案


server {
    listen       80; # 配置監聽埠
    server_name  localhost; # 配置域名

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html; # 服務預設啟動目錄
        index  index.html index.htm; # 預設訪問檔案
    }

    #error_page  404              /404.html; # 配置404頁面

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html; # 錯誤狀態碼的顯示頁面,配置後需要重新啟動
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

:q退出。 明白了這些配置項,可以知道我們的服務目錄放在了/usr/share/nginx/html下,可以使用命令進入看一下目錄下的檔案。

cd /usr/share/nginx/html
ls
# 50x.html index.html

可以用編輯器分別開啟這兩個html檔案

50.html

<!DOCTYPE html>
<html>
<head>
<title>Error</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
<p>If you are the system administrator of this resource then you should check
the <a href="http://nginx.org/r/error_log">error log</a> for details.</p>
<p><em>Faithfully yours, nginx.</em></p>
</body>
</html>

index.html

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

啟動服務

在 nginx 預設啟動目錄下,輸入

nginx -t # 測試配置
# 得到
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx # 接著啟動服務
ps -ef | grep nginx # 檢視程序
# root     24574     1  0 02:22 ?        00:00:00 nginx: master process nginx
# nginx    24575 24574  0 02:22 ?        00:00:00 nginx: worker process
# root     24577 24278  0 02:23 pts/0    00:00:00 grep nginx

接著開啟你的伺服器的所在的ip地址,看到以下的畫面,就說明配置成功了

啟動服務

Nginx服務啟動、停止、重啟

服務啟動

預設情況下,nginx 是不會自動開啟的,需要手動啟動。有多種方法

nginx直接啟動

nginx

systemctl命令啟動

使用Linux 的命令進行啟動,這種方法無論是啟動什麼服務都是一樣的,只是更改了服務的名字

systemctl start nginx.service

輸入命令後,沒有任何的提示,然後使用下面的命令進行查詢服務的執行狀態

ps aux | grep nginx

可以得到下面的結果

root     24574  0.0  0.1  47384   948 ?        Ss   02:22   0:00 nginx: master process nginx
nginx    24575  0.0  0.7  47788  3680 ?        S    02:22   0:00 nginx: worker process
root     24584  0.0  0.4 103380  2168 pts/0    S+   02:45   0:00 grep nginx

有了這三條記錄,說明Nginx 服務被正常開啟了。

服務停止

立即停止服務

nginx -s stop

強制停止方法,無論是否在工作

從容停止服務

nginx -s quit

這種方法需要程序完成當前工作後再停止

killadd 停止服務

killall nginx

systemctl停止服務

systemctl stop nginx.service

服務重啟

systemctl重啟服務

systemctl restart nginx.service

過載配置檔案

nginx -s reload

檢視埠號

在預設情況下,Nginx啟動後會監聽80埠,從而提供HTTP訪問,如果80埠已經被佔用則會啟動失敗。我麼可以使用netstat -tlnp命令檢視埠號的佔用情況。

netstat -tlnp
# 可以看到
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      24574/nginx         
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1465/master         
tcp        0      0 0.0.0.0:27652               0.0.0.0:*                   LISTEN      24426/sshd          
tcp        0      0 ::1:25                      :::*                        LISTEN      1465/master         
tcp        0      0 :::443                      :::*                        LISTEN      1906/python         
tcp        0      0 :::27652                    :::*                        LISTEN      24426/sshd 

自定義錯誤頁和訪問設定

多錯誤指向一個頁面

/etc/nginx/conf.d/default.conf 是可以看到下面這句話的。

error_page   500 502 503 504  /50x.html;

error_page指令用於自定義錯誤頁面,500,502,503,504 這些就是HTTP中最常見的錯誤碼,/50.html用於表示當發生上述指定的任意一個錯誤的時候,都是用網站根目錄下的/50.html檔案進行處理。

單獨為錯誤置頂處理方式

default.conf 檔案中新增以下設定

error_page 404 /404x.html;

接著輸入 :wq儲存退出。進入網站的目錄 usr/share/nginx/html新建一個404x.html檔案,並寫入一些資訊

<html>
<meta charset="UTF-8">
<body>
<h1>錯誤:404!頁面沒有找到!</h1>
</body>
</html>

重啟服務,得到的錯誤頁面

錯誤頁面

把錯誤碼換成一個地址

處理錯誤的時候,不僅可以只使用本伺服器的資源,還可以使用外部的資源。比如我們將配置檔案設定成這樣。

error_page 404 http://laibh.top

這樣子,當報404錯誤的時候就會連結到我的部落格的網址去了。、

簡單實現訪問控制

有時候我們的伺服器只允許特定主機訪問,比如內部OA系統,或者應用的管理後臺系統,更或者是某些應用介面,這時候我們就需要控制一些IP訪問,我們可以直接在location裡進行配置。

可以直接在default.conf裡進行配置。

 location / {
        deny   123.9.51.42;
        allow  45.76.202.231;
    }

配置完成後,重啟一下伺服器就可以實現限制(deny)和允許(allow)訪問了。這在工作中非常常用,一定要好好記得。

Nginx訪問許可權

deny是禁止訪問,allow是允許訪問。但Nginx的訪問控制還是比較複雜的

指令優先順序

location / {
        allow  45.76.202.231;
        deny   all;
    }

上面的配置,表示只允許 45.76.202.231訪問,禁止ip地址訪問。而如果將 deny語句提前,則會發現所有的ip都不可以訪問了。這說明了:在同一個塊中的兩個許可權指令,先出現的設定為覆蓋後出現的設定

複雜訪問控制權限匹配

在工作中,訪問許可權的控制需求更加複雜,例如,對於網站下的img(圖片目錄)是執行所有使用者訪問,但對於網站下的admin目錄則只允許公司內部固定IP訪問。這時候僅靠deny和allow這兩個指令,是無法實現的。我們需要location塊來完成相關的需求匹配。

=:精確匹配

上面的需求,配置程式碼如下:

location =/img{
    allow all;
}
location =/admin{
    deny all;
}

使用正則表示式設定訪問許可權

只有精確匹配有時是完不成我們的工作任務的,比如現在我們要禁止訪問所有php的頁面,php的頁面大多是後臺的管理或者介面程式碼,所以為了安全我們經常要禁止所有使用者訪問,而只開放公司內部訪問的。

location ~\.php${
    deny all;
}

未完待續...

相關推薦

前端必備Nginx學習

由於機緣巧合,認識了一些朋友,給我介紹了搬瓦工的網站。買了一個國外的伺服器,既可以FQ又擁有了一個搭載 Centos 6 的伺服器。一年19.99美元,摺合人民幣也就130左右,一鍵搭建。有興趣可以點選瞭解詳情。 很久之前就看到胖哥,出了關於nginx 的教程,今天來根據他的教程在買的 linux 伺服器上面

nginx學習nginx反向代理前端跨域問題

本地ip name str host jsonp 註意 access origin 跨域問題 * 跨域簡介: 跨域是指a頁面想獲取b頁面資源,如果a、b頁面的協議、域名、端口、子域名不同,所進行的訪問行動都是跨域的,而瀏覽器為了安全問題一般都限制了跨域訪問,也就是不允許跨域

程式設計師學習前端必備的5大網站,你用過幾個?

最近收到不少的粉絲的提問,問能不能推薦一些實戰綜合性強點前端學習網站。下面w3cschool精選了5個前端學習網站,相信這些網站將對前端學習者大有幫助。在這裡相信有許多想要學習前端的同學,關注小編文章最後面文字,可免費領取一整套系統的web前端學習教程!0、廖雪峰官方網站有不

Nginx學習總結(9)——前端跨域問題解決

1.什麼是跨域以及產生原因   跨域是指a頁面想獲取b頁面資源,如果a、b頁面的協議、域名、埠、子域名不同,或是a頁面為ip地址,b頁面為域名地址,所進行的訪問行動都是跨域的,而瀏覽器為了安全問題一

學習django和前端必備組件

django 項目 header trap cli 安裝 framework -h 必備 django:版本1.11.XX 命令:pip install XXX [email protected] pymysql beautifulsoup4 urlli

Nginx學習之反向代理WebSocket配置實例

需要 設置 攔截 創建客戶端 配置實例 rom 反向代理服務器 () 服務 寫在開始去年,做過一款競賽打分的APP。具體需求,同組教師之間可以相互通信,及時通知同組人員,其他組員做了那些操作(當然,這只是針對特定操作) 寫在開始 去年,做過一款競賽打分的APP。具體需求,同

Nginx學習筆記01Nginx簡要介紹與目錄說明

server 簡單 adt 服務器 網站目錄 interface simple 內核 優化 1.1. Nginx簡要介紹 (1)Nginx是Web服務器。 Apache、IIS:經典的通用Web服務器。 Lighttpd、Nginx:輕量級Web服務器。 Tomcat、

Nginx學習筆記02Nginx啟動運行與命令行

fig 日誌 sse 配置 mes ces htm argument root 1.1. Nginx啟動運行 Nginx的配置文件的一個簡單的例子。 conf目錄下的nginx.cfg文件的內容如下: #worker進程個數。 worker_processes 1

Nginx學習筆記03虛擬機與代理

listen 服務器 htm tomcat 返回 conf 首頁 cati family 1.1. 虛擬機 使用Nginx的配置文件中的server結點,可以很方便的在一個nginx實例中支持多個虛擬機。 前提條件:主機有多個域名。 本次試驗中用到的主機192.168.

Nginx學習筆記04URL匹配規則和實際路徑

oca 定義 wid val style 例如 top font 相同 1.1.1. URL匹配規則 匹配規則配置總結: location [=|~|~*|^~] /uri/ { } 優先級 匹配方式 描述 1最高 = 精確匹配。

Nginx學習筆記06負載均衡之(一)負載均衡介紹

最終 反向 結果 html proxy mime cnblogs 負載 cal 1.1.1. 負載均衡的介紹 Nginx中使用upstream配置塊,可以方便的配置出一個基於反向代理的負載均衡解決方案。 在upstream中可以包含多個server配置項,每個server配

Nginx學習筆記08使用變量

spa 協議 body con 內容 方法 c module post quest 反向代理模塊常用的幾種變量如下表所示: (1)HTTP請求相關的變量 變量名稱 描述 $host HTTP請求中的Host字段,不包含端口號。 $ht

前端開發入門學習筆記(一)

type red 學習 lin attach black 復合 等於 round HTML:超文本標記語言。 html:是一個基礎結構。 CSS:就是跟網頁做裝修的,修飾HTML的基礎內容:樣式。 JavaScript:一個網頁的行為,動作,動態的東西。 html標準文件格

前端必備:FastStoneCapture 和 Licecap &&& c++ 編譯執行

bsp alt 屏幕 軟件 時間 apt 博客 png 錄像 前端必備:FastStoneCapture 和 Licecap   FastStoneCapture這個軟件非常小,只有2M多,並且其功能很強大,包括截圖,錄制視頻,量尺,取色等等,對於前端工程師絕對是必備神器。

進階攻略|前端完整的學習路線

mongodb hang pac plus 其中 ans 隨著 項目 初學 最近寫了一篇關於前端一些常見輕便耐用的UI框架的小總結,很多小夥伴私信問我,要怎麽學習前端,沒有明確的方向,為了感謝大家的關註點贊打賞和喜歡,決定把前端的學習進階之路稍微整理一下,也為了自

前端必備SQL語句

engine des charset 中文 ges ima 其他 修改 tables 啟動mysql服務 下面列舉一下常用的sql語句,務必花幾分鐘學會它。 以下均在dos命令行下操作: 1.查看有多少庫。 show databases; 2.建庫。 我們最好

前端】react學習階段總結,學習react、react-router與redux的這些事兒

行程 clas 目前 webpack body src 控制 return 體驗 前言   借用阮一峰的一句話:真正學會 React 是一個漫長的過程。 這句話在我接觸react深入以後,更有感觸了。整個react體系都是全新的,最初做簡單的應用,僅僅使用react-to

Nginx學習

現象 sla 替代 主機 dream 不支持 得來 很好 存在 參考: http://blog.csdn.net/xiajun07061225/article/category/1461389 Apache與Nginx的優缺點比較 1、nginx相對於apache的優點:

收藏nginx學習

logs log .cn .com nginx htm details lin nbsp http://blog.csdn.net/u012186351/article/details/50605672 http://blog.csdn.net/qq_25371579/

Nginx 學習筆記(一)個人網站的Https配置

ast 請求重定向 nginx nta pda opera 配置虛擬主機 location cat 一、系統環境 1、系統:Ubuntu 16.04.2 LTS 2、WEB服務器:Openresty11.2.5 二、開始配置 1、獲取certbot客戶端 wget htt