前端必備的Nginx學習
由於機緣巧合,認識了一些朋友,給我介紹了搬瓦工的網站。買了一個國外的伺服器,既可以FQ又擁有了一個搭載 Centos 6
的伺服器。一年19.99美元,摺合人民幣也就130左右,一鍵搭建。有興趣可以點選瞭解詳情。
很久之前就看到胖哥,出了關於nginx 的教程,今天來根據他的教程在買的 linux 伺服器上面搭建 nginx。
連線 linux 伺服器在這裡我是用了 xshell6
和 xftp6
。可以直接到官網填個郵箱,然後官方會發給你郵箱分別的下載地址。或者你覺得懶的,可以直接點選我的百度雲盤下載
瞭解Nginx和環境準備
Nginx是什麼?
Nginx (engine x) 是一個高效能的
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.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