"Nginx是一款輕量級的HTTP服務器,採用事件驅動的異步非阻塞處理方式框架,這讓其具備極好的IO性能,時經常使用於服務端的反向代理和負載均衡。"php
好吧我認可我也不是很能理解官方這句話,但這裏咱們只需記住兩個關鍵詞,反向代理和負載均衡,這即是Nginx最大的特色,而且只須要簡單的配置即可以完成。對於不是專業運維的咱們而言,Nginx的簡易是十分友好的,下面咱們便來開始學習Nginx的基本配置,讓咱們快速的上手使用Nginx吧。html
這裏我我的推薦你們使用阿里雲的ECS雲服務器,由於比較方便,隨時隨地均可以進行操做,就不須要本身去裝虛擬機什麼的那麼麻煩啦。
若是你還在校或者是應屆畢業生的話在阿里雲上面有學生優惠,認證一下就能夠購買了,不到10塊錢一個月,能夠說是至關划算了。貼上連接:阿里雲服務器學生優惠版...
下面是以CentOS7.3 64位操做系統進行配置的,關於Linux命令行這裏也只用到一些基礎的,遇到不懂的你們能夠自行百度,這裏就再也不贅述啦。前端
先安裝一些必要的依賴,以便於後續的操做nginx
yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim
複製代碼
安裝Nginx
在命令行終端輸入:c++
vim /etc/yum.repos.d/nginx.repo
複製代碼
而後將官網提供的yum源複製到文件裏面去
(按鍵盤i表示輸入狀態,輸入完成以後按esc而後:wq保存並退出)web
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
複製代碼
複製進去後還須要改一下對應的操做系統和版本號,例如CenteOs7改爲以下面試
baseurl=http://nginx.org/packages/centos/7/$basearch/
複製代碼
開始安裝正則表達式
yum install nginx
複製代碼
安裝完成後輸入命令nginx -v查看版本號,出現如下提示則安裝成功:chrome
阿里雲安全組配置:
vim
進入nginx目錄下用vim打開nginx.conf配置文件
cd /etc/nginx
vim nginx.conf
複製代碼
如下是每項配置的含義
#定義Nginx運行的用戶和用戶組
user nginx;
#nginx進程數,建議設置爲等於CPU總核心數
worker_processes 1;
#錯誤日誌存放目錄和類型
error_log /var/log/nginx/error.log warn;
#進程文件
pid /var/run/nginx.pid;
events {
worker_connections 1024; #單個進程最大鏈接數(最大鏈接數=鏈接數*進程數)
}
#設定http服務器
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; #開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on。
#若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。注意:若是圖片顯示不正常把這個改爲off。
#tcp_nopush on; #防止網絡阻塞
keepalive_timeout 65; #長鏈接超時時間,單位是秒
#gzip on; #開啓gzip壓縮
include /etc/nginx/conf.d/*.conf; #包含的子配置項位置和文件,表示conf.d文件夾下.conf後綴的文件都會納入nginx配置中
複製代碼
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後面的內容能夠爲正則匹配
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;
#}
}
複製代碼
啓動
nginx
複製代碼
關閉
nginx -s quit # 進程完成當前工做後才中止
nginx -s stop # 不管進程是否在工做,當即中止
killall nginx # 殺死進程,當以上兩種操做無效時可使用該命令
複製代碼
從新載入配置文件
每次修改了nginx配置項時都要進行重載
nginx -s reload
複製代碼
查看端口號
默認狀況下nginx啓動後會監聽80端口來提供http服務,當出現啓動失敗的狀況時則要查詢一下端口是否被佔用:
netstat -tlnp
複製代碼
當頁面訪問出現錯誤時,咱們一般須要經過不一樣的錯誤類型給用戶返回不一樣的錯誤頁面提示,讓用戶能夠返回其餘頁面進行操做,達到較好的用戶體驗,這種提早預知錯誤並採起相應措施的作法也是咱們必須具有的開發思想,Nginx就能夠很方便的幫咱們作這一點。
打開nginx目錄下conf.d文件夾下的default.conf,能夠看到有如下兩個配置項
error_page 500 502 503 504 /50x.html; # 表示多個錯誤類型指向同一頁面
error_page 404 /404_error.html; # 單獨爲一個錯誤類型指定返回頁面
複製代碼
經過對error_page
進行配置錯誤類型和相應返回的html文件路徑,咱們就能夠友好的給用戶返回相應的錯誤提示界面啦。
顧名思義,即對用戶的訪問進行控制,好比咱們一般有些頁面是不但願用戶訪問的,儘管用戶不知道咱們的文件路徑,但不能排除一些誤操做或者惡意操做等,因此爲了提升應用的安全性,咱們必須對用戶進行一些權限設置。
location / {
allow 47.102.143.128; # 設置容許訪問的用戶Ip
allow 192.168.1.16;
deny all; # 設置拒絕訪問的用戶, all表示全部
# 值得注意的是,權限的配置是由上往下進行匹配的,這裏先容許了兩個Ip,後面未匹配到的則所有禁止訪問
# 可是若是deny all在上面,則下面的規則將再也不進行匹配,儘管下面設置了allow也會失效
# 同理allow all也是如此
}
# 指定一些文件或者路徑的訪問權限
location =/public { # "="表示精確匹配
allow all;
}
location =/private {
deny all;
}
location ~\.php$ { # 使用正則表達式進行匹配, 表示禁止訪問以php結尾的文件
deny all;
}
複製代碼
首先咱們要了解什麼是虛擬主機呢?
虛擬主機(英語:virtual hosting)或稱 共享主機(shared web hosting),又稱虛擬服務器,是一種在單一主機或主機羣上,實現多網域服務的方法,能夠運行多個網站或服務的技術。虛擬主機之間徹底獨立,並可由用戶自行管理,虛擬並不是指不存在,而是指空間是由實體的服務器延伸而來,其硬件系統能夠是基於服務器羣,或者單個服務器。
咱們能夠簡單把它理解爲是從主服務器上面分割出來的子服務器,而且一樣具有提供web服務的功能,意味着咱們能夠只用一臺服務器就能夠部署多個網站,這樣咱們就能夠把咱們平時作的項目阿,demo啊,簡歷啊什麼的只用一臺服務器就能夠所有部署上線,面試的時候咱們就能夠儘可能多的展現咱們的技能啦。
根據Nginx監聽多個端口號來區分不一樣的網站。
(這裏要注意檢查咱們的ESC服務器安全組規則中要容許訪問你配置的端口號,否則會出現端口沒法訪問的狀況)
咱們能夠在conf.d文件夾下面新建一個自配置文件,注意要要.conf結尾
server{
listen 8008;
server_name localhost;
root /usr/share/nginx/html/server8008;
index index.html;
}
server{
listen 8009;
server_name localhost;
root /usr/share/nginx/html/server8009;
index index.html;
}
複製代碼
接着咱們nginx -s reload
重載下配置,並在控制輸入netstat -tlnp
能夠看到,800八、800九、80端口都處於運行狀態。意味着咱們能夠在這三個不一樣端口部署你想要展現的東西啦。
這裏咱們首先要註冊一個域名,若是你想把你的做品展現給別人,我也強烈建議你去註冊一個域名,畢竟沒人會去記住一個ip地址的。
接着咱們先對域名進行解析(域名的解析要進行一系列認證和備案,否則可能會解析失敗,這些到阿里雲上面去操做就能夠了)
server{
listen 80;
server_name xxx.xxx.com; # 這裏是你解析出來的域名
location / {
root /usr/share/nginx/html/server8008;
index index.html index.html;
}
}
server{
listen 80;
server_name xxx2.xxx.com; # 這裏是你解析出來的另外一個域名
location / {
root /usr/share/nginx/html/server8009;
index index.html index.html;
}
}
複製代碼
修改完成後重載配置,就能夠經過你配置的兩個域名分別進行訪問啦。
何謂反向代理,先看一張圖片:
能夠看到當用戶訪問nginx代理服務器後,nginx將請求轉發到其餘的服務器上面,而轉發到哪一臺服務器則徹底由咱們的nginx來控制
反向代理的好處:
反向代理的簡單實現
server{
listen 80;
server_name xxx.xxx.com;
location / {
proxy_pass 192.168.1.16 # 代理的ip或域名
}
}
複製代碼
這樣配置以後,當用戶訪問xxx.xxx.com時,nginx便會幫咱們代理到192.168.1.16這臺服務器下,這就實現了一個反向代理。
反向代理的其餘配置
proxy_set_header
:在將客戶端請求發送給後端服務器以前,更改來自客戶端的請求頭信息。proxy_connect_timeout
:配置Nginx與後端代理服務器嘗試創建鏈接的超時時間。proxy_read_timeout
:配置Nginx向後端服務器組發出read請求後,等待相應的超時時間。proxy_send_timeout
:配置Nginx向後端服務器組發出write請求後,等待相應的超時時間。proxy_redirect
:用於修改後端服務器返回的響應頭中的Location和Refresh。咱們能夠訪問一下淘寶或者京東的網站,而後打開經過chrome瀏覽器的開發者工具,當切換到移動設備刷新後,它便會給咱們呈現出移動端的頁面,這一操做Nginx一樣能夠幫咱們作到。
經過Nginx內置變量$http_user_agent
獲取請求客戶端的userAgent
server{
listen 80;
server_name xxx.xxx.com;
location / {
root /usr/share/nginx/pc; # 正常狀態下訪問呈現PC端網站
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') { # 獲取用戶設備信息
root /usr/share/nginx/mobile; # 當用戶爲移動設備訪問時呈現移動端網站
}
index index.html;
}
}
複製代碼
以上就爲Nginx的入門配置項啦!
這些配置對於部署咱們本身的上線項目或者我的博客都徹底不在話下,做爲前端開發者的你趕忙上手把玩把玩吧。