Linux - nginx基礎及常用操作
目錄
- Linux - nginx基礎及常用操作
- Tengine淘寶nginx安裝流程
- nginx的主配置文件nginx.conf
- 基於域名的多虛擬主機實戰
- nginx的訪問日誌功能
- 網站的404頁面優化
- 拒絕某些ip訪問
- nginx的反向代理
- nginx反向代理的實現
- nginx負載均衡簡單實現
Linux - nginx基礎及常用操作
nginx是一個開源的,支持高性能,高並發的www服務和代理服務軟件。它是一個俄羅斯人lgor sysoev開發的,作者將源代碼開源出來供全球使用。
nginx比它大哥apache性能改進許多,nginx占用的系統資源更少,支持更高的並發連接,有更高的訪問效率。
nginx不但是一個優秀的web服務軟件,還可以作為反向代理,負載均衡,以及緩存服務使用。
安裝更為簡單,方便,靈活。
nginx可以說是非常nb了
- 支持高並發,能支持幾萬並發連接
- 資源消耗少,在3萬並發連接下開啟10個nginx線程消耗的內存不到200M
- 可以做http反向代理和負載均衡
- 支持異步網絡i/o事件模型epoll
Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。
Tengine淘寶nginx安裝流程
1.淘寶nginx的學習使用,安裝
下載源碼包
cd /opt
wget -c http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
2.卸載掉之前,學習yum時候,安裝的nginx軟件,
yum remove nginx -y
3。解決編譯安裝nginx的軟件依賴
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
4.解壓縮源碼包,安裝
解壓
tar -zxvf tengine-2.2.0.tar.gz
源碼編譯安裝三部曲
cd tengine-2.2.0
1.釋放makefile
./configure --prefix=/opt/tnginx220
cd tnginx220
2.編譯nginx
make
3.編譯安裝
make install
4.編譯完成後,tnginx就可以用了
學習nginx的代碼目錄結構
[root@master tnginx220]# pwd
/opt/tnginx220
[root@master tnginx220]#
[root@master tnginx220]# ll
total 8
drwx------. 2 nobody root 6 Mar 11 08:51 client_body_temp
drwxr-xr-x. 2 root root 4096 Mar 11 08:50 conf #放nginx所有配置文件的地兒
drwx------. 2 nobody root 6 Mar 11 08:51 fastcgi_temp
drwxr-xr-x. 2 root root 40 Mar 11 08:50 html #存放前端 html文件的
drwxr-xr-x. 2 root root 4096 Mar 11 08:50 include
drwxr-xr-x. 2 root root 41 Mar 11 08:52 logs #nginx的日誌文件夾
drwxr-xr-x. 2 root root 6 Mar 11 08:50 modules
drwx------. 2 nobody root 6 Mar 11 08:51 proxy_temp
drwxr-xr-x. 2 root root 35 Mar 11 08:50 sbin #存放nginx二進制命令的
drwx------. 2 nobody root 6 Mar 11 08:51 scgi_temp
drwx------. 2 nobody root 6 Mar 11 08:51 uwsgi_temp
5.啟動淘寶nginx
./nginx
6.添加linux的PATH變量,快捷使用nginx命令
echo $PATH
PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tnginx220/sbin"
永久添加變量環境:
vim ~/.bash_profile
修改/etc/profile文件,通過vi或vim增加變量
nginx的主配置文件nginx.conf
http內核模塊
//公共的配置定義在http{}
http { //http層開始
...
//使用Server配置網站, 每個Server{}代表一個網站(簡稱虛擬主機)
'server' {
listen 80; //監聽端口, 默認80
server_name localhost; //提供服務的域名或主機名
access_log host.access.log //訪問日誌
//控制網站訪問路徑
'location' / {
root /usr/share/nginx/html; //存放網站代碼路徑
index index.html index.htm; //服務器返回的默認頁面文件
}
//指定錯誤代碼, 統一定義錯誤頁面, 錯誤代碼重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
}
...
//第二個虛擬主機配置
'server' {
...
}
include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目錄下所有以.conf結尾的文件
} //http層結束
基於域名的多虛擬主機實戰
一個服務器上,可以運行兩個乃至多個網站
註意: 防火墻端口問題
1.環境準備,準備好2個域名 ,這裏是模擬的本地域名解析 ,找到hosts文件
由於我們是想配置windows,可以訪問不同的 域名,因此配置windows的hosts
192.168.11.65 dnf.com
192.168.11.65 xiaohua.com
編輯文件 C:\Windows\System32\drivers\etc\hosts
寫入
2.配置nginx支持多虛擬主機
修改nginx.conf 修改2個server虛擬主機的配置
dnf的虛擬主機
server {
listen 80;
server_name dnf.com;
# 當我們訪問s17dnf.com:80/的時候,就進入這個虛擬主機,且找到這個location,進行網站資源分配
location / {
root /opt/s17dnf/;
index index.html;
}
}
第二個虛擬主機,s17校花網
server{
listen 80;
server_name xiaohua.com;
location / {
root /opt/s17xiaohua/;
index index.html;
}
}
分別修改兩個網址的根目錄數據
mkdir -p /opt/{s17dnf,s17xiaohua}
分別在/opt/s17dnf/創建index.html
/opt/s17xiaohua/創建index.html
3.修改完配置文件,檢測語法
nginx -t
4.平滑加載nginx(不重啟nginx,重新讀取配置文件)
nginx -s reload
nginx的訪問日誌功能
編輯 nginx.conf
打開註釋
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;
...
網站的404頁面優化
1.編輯nginx.conf ,配置如下:
server {
listen 80;
server_name s17dnf.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /opt/s17dnf;
index index.html index.htm;
}
#打開這個參數的配置,開啟錯誤頁面
error_page 404 /404.html;
error_page 401 402 403 /403.html;
}
2.編輯/opt/s17dnf下 HTML文件
拒絕某些ip訪問
location / {
deny 你想限制的ip;
root /opt/s17dnf;
index index.html index.htm;
}
nginx的反向代理
nginx反向代理的實現
1.實驗環境準備
192.168.11.229 真實資源服務器,模擬django ,理解為房東的房屋資源
192.168.11.136 nginx代理服務器 ,理解為 房屋中介
2.思路
我們作為客戶端,訪問 代理服務器, ,代理服務器,將資源服務器上的東西,進行返回
3.配置 資源服務器
192.168.11.229 s17dnf.com
4.配置代理服務器
192.168.11.136
修改192.168.11.136這臺機器的nginx配置文件,開啟反向代理
配置nginx.conf的server{}如下
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
#反向代理參數,當我們請求192.168.11.136:80/的時候,進入這裏server,然後location進行資源分配
proxy_pass http://192.168.11.229; #就是間接的訪問了 192.168.11.229:80/
}
}
nginx負載均衡簡單實現
思路介紹:
nginx.conf>http>定義一個負載均價池
upstream myserver {
server 192.168.11.229;
server 192.168.11.xx;
}
nginx.conf>http>通過反向代理轉發
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location / {
#反向代理參數,當我們請求192.168.11.136:80/的時候,進入這裏server,然後location進行資源分配
proxy_pass myserver; #就是間接的訪問了 192.168.11.229:80/
}
}
配置nginx負載均衡:
環境準備,三臺服務器
三臺機器都是通過nginx實現的
192.168.11.136 反向代理服務器
192.168.11.229 資源服務器1 這個機器是返回的dnf頁面
192.168.11.176 資源服務器2 這個配置的是 index.html 來了老弟
1.配置反向代理服務器 192.168.11.136
修改nginx.conf如下參數
定義負載均衡池
upstream s17server {
server 192.168.11.229;
server 192.168.11.176;
}
#轉發請求給負載均衡池
location / {
proxy_pass http://s17server;
}
2.此時通過負載均衡器 192.168.11.136,進行訪問測試,默認是輪詢機制
3.upstream分配策略
weight 權重
upstream django {
server 10.0.0.10:8000 weight=5;
server 10.0.0.11:9000 weight=10;#這個節點訪問比率是大於8000的
}
ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器
upstream django {
ip_hash;
server 10.0.0.10:8000;
server 10.0.0.11:9000;
}
backup
在非backup機器繁忙或者宕機時,請求backup機器,因此機器默認壓力最小
upstream django {
server 10.0.0.10:8000 weight=5;
server 10.0.0.11:9000;
server node.oldboy.com:8080 backup;
}
Linux - nginx基礎及常用操作