概述
Nginx是高效能的輕量級WEB伺服器,由於其提供HTTP代理和反向代理、負載均衡、快取等一系列重要特性,從而廣泛應用於當今的WEB服務之中,學習其很有必要。筆者也是從一個初學者開始學習並記錄,希望後續漸漸深入。
對了,為什麼不用Docker來啟動Nginx呢?因為不想啊!
注: 本文首發於 My 公眾號 CodeSheep ,可 長按 或 掃描 下面的 小心心 來訂閱 ↓ ↓ ↓
實驗環境
- CentOS 7.4 64Bit
- Nginx 1.14.0 穩定版
下載Nginx
wget http://nginx.org/download/nginx-1.14.0.tar.gz
複製程式碼
安裝Nginx
- 安裝第三方庫
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
yum -y install pcre-devel
複製程式碼
安裝成功以後可以檢視pcre版本: pcre-config —version
- 解壓安裝包
tar zxvf nginx-1.14.0.tar.gz
複製程式碼
- 從configure指令碼自動生成Makefile
cd /root/nginx-1.14.0
./configure --prefix=/usr/local/webserver/nginx
複製程式碼
這裡的 —prefix
選項是指定Nginx的安裝路徑,這裡我是指定安裝到路徑:/usr/local/webserver/nginx
- 編譯安裝
cd /root/nginx-1.14.0
make && make install
複製程式碼
編譯安裝過程如下,直到完成
- 檢視Nginx版本
/usr/local/webserver/nginx/sbin/nginx -v
複製程式碼
- 檢視安裝後的目錄
總共四個目錄:conf
、html
、logs
、sbin
啟動Nginx
/usr/local/webserver/nginx/sbin/nginx
複製程式碼
瀏覽器訪問Nginx成功(注意:由於我的機子上80埠被佔用了,因此我將Nginx起在81埠上了):
常用指令
- 測試nginx測試檔案是否正確
/usr/local/webserver/nginx/sbin/nginx -t
複製程式碼
- 指定配置檔案啟動
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
複製程式碼
- 重啟nginx
/usr/local/webserver/nginx/sbin/nginx -s reload # 重新載入配置檔案
/usr/local/webserver/nginx/sbin/nginx -s reopen #重啟 Nginx
複製程式碼
- 停止nginx
/usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx
複製程式碼
Nginx伺服器配置例項與實驗
準備配置檔案 nginx.conf
如下:
// 全域性配置
user nobody nobody;
worker_processes 3;
error_log logs/error.log;
pid logs/nginx.pid;
// events塊配置
events {
use epoll;
worker_connections 1024;
}
// http塊配置
http {
include 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 logs/access.log main;
sendfile on;
keepalive_timeout 65;
// 虛擬主機1:基於域名codesheep.com
server {
listen 8088;
server_name codesheep;
access_log /codesheep/webserver/server1/log/access.log;
error_page 404 /404.html;
location /server1/location1 {
root /codesheep/webserver;
index index.server1-location1.htm;
}
location /server1/location2 {
root /codesheep/webserver;
index index.server1-location2.htm;
}
}
// 虛擬主機2:基於IP地址:192.168.31.177
server {
listen 8089;
server_name 192.168.31.177;
access_log /codesheep/webserver/server2/log/access.log;
error_page 404 /404.html;
location /server2/location1 {
root /codesheep/webserver;
index index.server2-location1.htm;
}
location /srv2/loc2 {
alias /codesheep/webserver/server2/location2/;
index index.server2-location2.htm;
}
location = /404.html {
root /codesheep/webserver/;
index 404.html;
}
}
}
複製程式碼
很明顯,在上述配置檔案中配置了兩個虛擬主機:一個 基於域名 、 一個基於IP地址
為了驗證該配置的正確性,我們對照此配置,構建一個與其對應的靜態站點,其目錄結構如下:
現在可以啟動Nginx伺服器,並在瀏覽器中進行測試
- 測試站點server1的訪問
這就說明配置檔案中虛擬主機1配置生效!
注意:這裡域名www.codesheep.com之所以能被解析識別,是因為本地配置了DNS伺服器!
- 測試站點server2的訪問
這就說明配置檔案中虛擬主機2配置生效!
後記
作者更多的SpringBt實踐文章在此:
- Spring Boot應用監控實戰
- SpringBoot應用部署於外接Tomcat容器
- ElasticSearch搜尋引擎在SpringBt中的實踐
- 初探Kotlin+SpringBoot聯合程式設計
- Spring Boot日誌框架實踐
- SpringBoot優雅編碼之:Lombok加持
如果有興趣,也可以抽點時間看看作者一些關於容器化、微服務化方面的文章:
- 利用K8S技術棧打造個人私有云 連載文章
- 從一份配置清單詳解Nginx伺服器配置
- Docker容器視覺化監控中心搭建
- 利用ELK搭建Docker容器化應用日誌中心
- RPC框架實踐之:Apache Thrift
- RPC框架實踐之:Google gRPC
- 微服務呼叫鏈追蹤中心搭建
- Docker容器跨主機通訊
- Docker Swarm叢集初探
- 高效編寫Dockerfile的幾條準則