Nginx從入門到放棄
1 Nginx環境搭建
1.1 下載和安裝Nginx
在下載之前,我們先把編譯工具及庫檔案安裝一下。
yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel
然後來到:http://nginx.org/en/download.html
下載穩定版即可:
在下載好之後,上傳到Linux:我這邊直接使用的rz命令。
然後解壓:tar -zxvf nginx-1.18.0.tar.gz
然後進入解壓的目錄:cd nginx-1.18.0,目錄結構如下,有一個可執行檔案configure
然後執行configure,配置安裝路徑:./configure --prefix=/usr/local/nginx
最後就能編譯和安裝了:make & make install
如果沒安裝編譯工具及庫檔案就會失敗:
解決方法是安裝下前置庫:yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel
然後刪除目錄rm -rf nginx-1.18.0,重新執行上面的步驟即可。
安裝成功後,我們進入/usr/local目錄,即可看見nginx目錄
1.2 啟動Nginx的幾種方式
1.2.1 直接啟動
進入到/usr/local/nginx/sbin,該目錄下就一個nginx,執行就啟動了,啟動完成後,會有兩個程式,主程式與工作程式。
然後訪問一下伺服器即可看到(如果用的阿里雲主機訪問不了,去阿里雲開放一下80埠!):
1.2.2 通過指定配置檔案方式啟動
先殺掉剛剛啟動的nginx:kill 16581
然後啟動命令如下(使用這種全路徑可不用進入到sbin目錄即可執行):
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
1.2.3 重啟Nginx
如果修改了配置檔案,可以選擇使用重啟命令:./nginx -s reload
2 Nginx配置檔案說明
#user nobody;
#工作程式,一般與cpu數量一樣就行
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
#一個工作程式的最大連線數,最大65535,nginx併發總數等於 worker_processes*worker_connections
worker_connections 1024;
}
#配置http伺服器
http {
#能處理的檔案型別,基本包含了
include mime.types;
#如果真有未知型別的,直接以io流返回,下載後隨便處理
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;
#防止網路阻塞,一般生產環境會開啟
#tcp_nopush on;
#keepalive_timeout 0;
#長連線超時時間,單位秒
keepalive_timeout 65;
#開啟gzip壓縮傳輸,會把程式碼裡裡空格換行啥的刪除掉,檔案就小了啊
#gzip on;
#配置虛擬主機,一個http裡可以有多個server
server {
listen 80;#監聽的埠
server_name localhost;#域名或ip
#預設是utf-8
#charset koi8-r;
#access_log logs/host.access.log main;
#當請求路徑有/則匹配(訪問域名後預設會有/,瀏覽器隱藏了而已,就和埠80一樣隱藏了)
location / {
#配置根目錄,預設就是nginx安裝目錄下的html目錄
root html;
#配置首頁檔名稱
index index.html index.htm;
}
#配置404頁面
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
#配置50x錯誤頁面
error_page 500 502 503 504 /50x.html;
#精準匹配,只有請求地址/50x.html時才匹配成功
location = /50x.html {
root 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;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
3 搭建靜態伺服器
先把靜態網頁專案傳到伺服器,這裡我使用的時xftp,在xshell裡點選即可,如果第一次應該是要安裝的:
然後編輯nginx.conf,這裡寫不了幾個字,但是還是推薦使用sz命令下載到windows上編輯舒服,然後再上傳時使用rz -y命令,如果不加-y會失敗,也沒有啥解決方法提示,加上-y就是覆蓋檔案的意思。
然後配置一下匹配路徑,其實就在/後面加了目錄名,根路徑還是html,如果放其他地方記得改下root就行了:
然後直接訪問即可看到網站首頁了,我這邊不需要重啟伺服器,如果不行重啟試試。
4 負載均衡
4.1 Nginx常用的負載均衡策略
Nginx常用的負載均衡策略分為4種,分別為:
- 輪詢(預設):即每臺伺服器輪流處理請求,適合在伺服器效能一致情況下使用。
- 權重:該模式適合在伺服器效能不一致情況下使用,通過設定不同的權重去處理不同數量的請求。
- ip_hash:每次按訪問的ip的hash值分配伺服器,使用者會固定的訪問到一臺伺服器,可以解決session丟失問題。
- 最少連線:該模式會訪問當前連線最少的伺服器,往往連線最少的很可能是效能最差勁的伺服器,所以分配過去可能會壓力過大,不是很推薦使用。
4.2 準備環境
我們需要兩臺以上的tomcat伺服器做測試,所以先準備好環境,沒有tomcat可以先下載:參考:https://blog.csdn.net/qq_42449106/article/details/106583083
複製目錄:cp -r /usr/local/tomcat /usr/local/tomcat-8081,cp -r /usr/local/tomcat /usr/local/tomcat-8082
配置環境變數:vim /etc/profile
export CATALINA_HOME_8081='/usr/local/tomcat-8081'
export CATALINA_BASE_8081='/usr/local/tomcat-8081'
export CATALINA_HOME_8082='/usr/local/tomcat-8082'
export CATALINA_BASE_8082='/usr/local/tomcat-8082'
然後修改/usr/local/tomcat-8081/bin/catalina.sh,找到這個位置,新增程式碼
export CATALINA_BASE=$CATALINA_BASE_8081
export CATALINA_HOME=$CATALINA_HOME_8081
然後修改conf目錄下的server.xml:
然後繼續修改埠,這個埠可以隨便寫,只要不衝突就行,預設是8005,用途參考:https://blog.csdn.net/BigDevil_/article/details/105242985
兩個伺服器配置都這樣改改就行了,然後放兩個頁面進去測試一下,為了簡單方便的測試,兩個頁面分別寫上對應埠號方便檢視結果,test.html程式碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>負載均衡測試</title>
</head>
<body>
<h1 style="color:red">伺服器埠:8081</h1>
<h1>這是測試負載均衡的頁面主要內容</h1>
<h1>這是測試負載均衡的頁面主要內容</h1>
<h1>這是測試負載均衡的頁面主要內容</h1>
</body>
</html>
然後執行試試:
/usr/local/tomcat-8081/bin/startup.sh -d | tail -f /usr/local/tomcat-8081/logs/catalina.out
兩個伺服器都啟動成功後,訪問看看:
4.3 輪詢模式(預設)
兩個埠號,不可能讓使用者自己記住埠號吧,來個配置,實現預設的輪詢模式的負載均衡:
修改配置後記得傳到伺服器:rz -y,然後重啟一下nginx,訪問一下,這次不需要輸入埠即可訪問,重新整理一次就會變一次埠:
4.4 權重模式
這樣配置訪問的順序為:8081 8081 8082 8081 8081 8082...
4.5 ip_hash
這樣配置後訪問頁面就一直是一個埠了。
4.6 最少連線
該方式不方便測試。也不推薦使用。
4.7 其他配置
- down:當前伺服器已經結束通話,不再處理任何請求。
- backup:備份伺服器,預設不會處理任何請求,只有當其他非備份伺服器掛掉才會請求這個伺服器。
用法均為:server ip:port down/backup。
5 靜態代理
在上面的test.html頁面加入一張圖片作為靜態資源:<img src="images/dapao.jpg">,我們不用在tomcat里加入這個圖片,但是還是得放在某個地方才行,作為學習,我放了三個地方進行測試:
/usr/local/nginx/html/my_static_proxy/testLoadBalancing/images
/opt/static/testLoadBalancing/images
/usr/local/nginx/html/my_static_proxy/testLoadBalancing/images
testLoadBalancing是我專案名稱,所以images目錄必須在改目錄下。
上面三個目錄對應下面得配置:
location ~ .*/(css|js|img|images|image|font|fonts) {
#root html/my_static_proxy
#root /opt/static;
root /usr/local/nginx/my_static_proxy;
}
~ 就是使用正則,記得左右空格
. 匹配除換行符以外的任意一個字元
* 任意字元
其他參考文章:https://www.jb51.net/article/149053.htm
上面的程式碼一定注意空格啥的,反正我調整了半小時,reload伺服器沒報錯但是就訪問不了圖片,後來改改改的發現reload有時還不起作用了,使用./nginx -s stop停止後,再啟動才重新讀取了配置。。。後來使用reload又可以了,不知道是哪裡有問題,可能是自己懵了。
然後訪問可以看到圖片是可以顯示的:
6 動靜分離和虛擬主機
其實這個和靜態代理差不多,只不過配置了多個nginx虛擬主機進行靜態代理。
建立個新專案NginxDemo,放個jsp檔案(動態資源),裡面包含了一張圖片(靜態資源),執行兩個tomcat
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>這是一個jsp頁面!!!埠--8081</h1>
<img src="images/dapao.jpg">
</body>
</html>
然後開始配置:
首先要配置兩個nginx靜態伺服器,我們當然沒有更多的伺服器資源,所以只能改改埠假裝有了:
#81和82這兩個伺服器做靜態資源的代理
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~ .*/(css|js|img|images|image|font|fonts) {
root /usr/local/nginx/my_static_proxy;
}
}
server {
listen 82;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~ .*/(css|js|img|images|image|font|fonts) {
root /usr/local/nginx/my_static_proxy;
}
}
注意了,我們這個專案的圖片只放在了/usr/local/nginx/my_static_proxy/NginxDemo/images裡的,不像靜態分離那節放了幾個地方...
然後配置負載均衡:
#靜態資源代理
upstream static_proxy {
server 47.115.58.135:81;
server 47.115.58.135:82;
}
然後配置80埠的靜態資源監聽,讓它去均衡的訪問81和82那兩個伺服器,80這個只管代理請求了。
#靜態代理
location ~ .*/(css|js|img|images|image|font|fonts) {
#root html/my_static_proxy
#root /opt/static;
#root /usr/local/nginx/my_static_proxy;
#改成靜態資源代理
proxy_pass http://static_proxy;
}
注意這裡的static_proxy要和upstream後的一樣!我又不小心寫錯了一次!血的教訓!
最後訪問jsp頁面:
相關文章
- Vue 從入門到放棄Vue
- Git 從入門到放棄Git
- GraphQL從入門到放棄
- webpack從入門到放棄Web
- 推送 從入門到放棄
- Swift從入門到放棄Swift
- HTTP從入門到放棄HTTP
- openstack從入門到放棄
- JavaScript 從入門到放棄JavaScript
- NumPy從入門到放棄
- Spark從入門到放棄---RDDSpark
- XXE從入門到放棄
- 快取從入門到放棄快取
- webpack 從入門到放棄(一)Web
- swoole——從入門到放棄(一)
- 從入門到放棄 - 事件溯源事件
- swoole——從入門到放棄(三)
- FQ:從入門到放棄(二)
- 敏捷QA,從入門到放棄敏捷
- HTTP快取從入門到放棄HTTP快取
- Taro 小程式 從入門到放棄!
- t-SNE 從入門到放棄
- 設計模式從放棄到入門設計模式
- deepspeed從入門到放棄
- Scikit-learn從入門到放棄
- Elasticsearch從入門到放棄:再聊搜尋Elasticsearch
- Flink從入門到放棄-大綱
- Realm資料庫 從入門到“放棄”資料庫
- 分散式訓練從入門到放棄分散式
- 從入門到放棄之大資料Hive大資料Hive
- Redis從入門到放棄系列(十) ClusterRedis
- AOP埋點從入門到放棄(三)
- AOP埋點從入門到放棄(二)
- Spark從入門到放棄——初始Spark(一)Spark
- 從入門到放棄,我用了五年
- 從入門到放棄之promise用法(上)Promise
- Realm 資料庫 從入門到“放棄”資料庫
- JavaScript30秒, 從入門到放棄JavaScript