1. 筆記資料來源
筆記來源自 狂神的 nginx講說 Nginx入門 和 程式羊的 保姆級教程
2. Nginx簡介
1. 什么是Nginx?
Nginx (engine x)是一個高性能的HTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務,Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambleru站點(俄文:PaM6nep)開發的,第一個公開版本0.1.0發布于2004年10月4日,2011年6月1日,nginx 1.0.4發布,
其特點是占有記憶體少,并發能力強,事實上ngino的并發能力在同型別的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等,在全球活躍的網站中有12.18%的使用比率,大約為2220萬個網站,
Nginx是一個安裝非常的簡單、組態檔非常簡潔(還能夠支持peri語法)、Bug非常少的服務,Nginx啟動特別容易,并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動,你還能夠不間斷服務的情況下進行軟體版本的升級,
Nginx代碼完全用C語言從頭寫成,官方資料測驗表明能夠支持高達50,000個并發連接數的回應,
2. Nginx的作用
Http代理,反向代理:作為web服務器最常用的作用之一,尤其是反向代理
- 正向代理

- 反向代理

Nginx提供的負載均衡策略有兩種,內置策略和擴展策略,
內置策略為輪詢、加權輪詢、 ip hash 、
擴展策略是由用戶自己定義了
-
輪詢

-
加權輪詢

動靜分離,在我們的軟體開發中,有些請求是需要后臺處理的,有些請求是不需要經過后臺處理的(如: css、 html.jpg. js等等檔案),這些不需要經過后臺處理的檔案稱為靜態檔案,讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做快取操作,提高資源回應的速度,
3. Nginx安裝
1. Windows下安裝
- 下載Nginx
下載地址 最好下載穩定版本的,可以下載 nginx/Window-1.16.1,下載成功之后解壓就行了
鏈接: https://pan.baidu.com/s/1G7Qz1fy9jSSttiacpMIL_g 提取碼: x4qg

2. 啟動Nginx
- 直接雙擊nginx.exe,啟動成功會一閃而過
- 使用cmd 啟動nginx.exe
錯誤集錦
nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
? 錯誤原因: 80埠被占用
? 解決辦法
-
Win + R 或者打開 cmd ,輸入
netstat -ano|findstr :80
-
接著使用
tasklist | findstr 4查詢是那個服務占用了

-
如果埠號是
4,是System行程占用80埠的話,需要進行關閉,否則直接使用taskkill /pid 4 /f關閉即可 -
使用
netsh http show servicestate查看行程號

-
打開任務管理器,找到PID是
4632的行程關閉掉即可,或者是關閉系統的IIS Admin 服務 -
再次進入安裝目錄
nginx.exe運行nginx,沒有任何提示資訊訪問localhost:80或者localhost出現下邊的界面即可,因為 http默認埠是80,所以不加也可以
2. Linux下安裝
下載地址 下載成功之后上傳到linux中
scp niginx.tar.gz root@ip:/opt
-
查看是否安裝nginx
whereis nginx,如果沒提示資訊就是沒有安裝 -
使用
tar -zxvf nginx.tar.gz解壓 -
cd nginx查看目錄,與window應該是一致的 -
在此目錄下執行
./configure -
執行
make以及make install -
查看nginx配置目錄
whereis nginx -
進入配置目錄
cd /usr/local/nginx/

-
啟動nginx
cd sbin #啟動nginx,啟動是沒有任何提示資訊的 ./nginx # 查詢是否安裝成功 ps -ef|grep nginx # 或者直接訪問機器的ip地址,查看是否能出現歡迎頁面結課 -
開放埠號
# 查看開放的埠號 firewall-cmd --list-all #設定需要開放的埠號 firewall-cmd --add-service=http --permanent firewall-cmd --add-port=80/tcp --permanent #重啟防火墻 firewall-cmd --reload # 使用iptables 的方法請參考下邊的 錯誤解決辦法 # 阿里云或者是騰訊云服務器的話直接在安全組策略添加就行了
錯誤集錦
執行
./configure報錯
Checking for C complier… not found
錯誤原因:沒有安裝C編譯器
解決辦法
yum -y install gccyum -y install gcc-c++yum -y install openssl openssl-devel
更多錯誤解決辦法,請參考 Centos安裝Nginx錯誤集錦
3. Nginx 常用命令
# 進入 nginx目錄
cd /usr/local/nginx/sbin/
#啟動
./nginx
#停止
./ngins -s stop
# 安全退出
./nginx -s quit
# 重新加載組態檔
./nginx -s reload
# 查看nginx行程
ps aux|grep nginx
4. Nginx配置
1. 組態檔
官方原來的組態檔
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#################以上為nginx的全域配置################
#最大連接數
events {
worker_connections 1024;
}
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;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /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;
# }
#}
}
2. 自定義配置
主要用到的就是一下幾個內容,修改完成之后使用
nginx -s reload重新加載 Nginx
#user nobody;
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 {
# 最大連接數
worker_connections 1024;
}
###http配置
http{
upstream lesscoding{
#負載均衡配置
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
server{
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://lesscoding;
}
#匹配正則運算式的方式,請求中中帶有 test 就會轉發到這個地址,主要是PCRE的功勞
location ~ /test/ {
proxy_pass http://127.0.0.1:8080;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server{
# 監聽8081埠
listen 8081;
server_name localhost;
}
}
3. 錯誤集錦
java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.
解決辦法: 檢查nginx.conf 中的 upstream 后邊跟的名字是否有非法字符 _
慘痛教訓:更改檔案之后一定要用 nginx -s stop關閉后重啟,或者是 nginx -s reload重繪組態檔,而不是直接關閉命令視窗,否則就會出現莫名其妙的400錯誤
5. 前后端分離配置
什么是動靜分離
Nginx 動靜分離簡單來說就是吧動態跟靜態請求分開,不能理解成只是簡單的把動態頁面和靜態頁面物理分離,嚴格來說是把動態請求和靜態請求分開,可以理解成 Nginx處理靜態頁面,Tomcat處理動態頁面,大致可以分為兩種
- 把靜態資源放在單獨的服務器上
- 前后端一起發布通過nginx分開
1. 前端打包
前端使用
npm run build(:prod) 打包,將生成的dist目錄上傳到服務器
- 修改
nginx.conf
#最上邊的 user 修改為 root,但是也有人不建議用root賬戶,看個人需求吧
user root;
# 找到 server標簽下邊的 location
location / {
root #上傳之后的dist的路徑;
index index.html index.htm;
}
- 啟動nginx
# 進入nginx安裝目錄
cd /usr/local/nginx/sbin
#運行nginx
./nginx
2. 后端打包
后端使用 maven 打包成 jar包直接運行或者是達成 war 包放在tomcat容器里邊運行
打 war 包請參考 https://blog.csdn.net/qq_42059717/article/details/119718896
- 后端打包
mvn clean package
- 后端運行jar 包
nohup java -jar demo.jar & nohup.out
3. 修改nginx組態檔
這里不知道放什么,先放這個占著位置
- 修改組態檔
http{
#權重越大,訪問的幾率越大
upstream demo {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=10;
}
server{
location / {
root /root/workspace/demo/dost;
index index.html index.htm;
}
location ~ /demo/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://demo/; #直接寫ip也行
}
}
}
- 重啟nginx
# 進入 nginx安裝目錄
cd /usr/local/nginx/sbin
#重新加載組態檔
./nginx -s reload
4. 后端部署war包配置
- 將 war 包放到 tomcat目錄下
#進入tomcat
cd /usr/local/tomcat/apache-tomcat
# 進入webapps目錄
cd webapps/
# 復制檔案到當前目錄
cp /root/woekspeace/demo/demo.war ./
# 或者使用mv命令進行移動
mv /root.workspace/demo/demo.war ./
- 啟動 tomcat
service tomcat start
這樣之后必須要在埠號之后加上我們的目錄名稱才能夠訪問到我們的專案
- 修改 tomcat組態檔
#進入tomcat的配置目錄
cd /usr/local/tomcat/apache-tomcat/conf
#編輯組態檔
vim server.xml
#輸入/Host 或者是 ?Host快速定位
?Host
#按 i 進入編輯模式 在<Host>變遷內添加下列內容
<Context path="" docBase="/usr/local/src/apache-tomcat-7.0.106/webapps/demo" debug="0" privileged="true" reloadable="true"/>
# esc 退出編輯模式保存退出
:wq!
#重啟tomcat
service tomcat stop
service tomcat start
emo/demo.war ./
- 啟動 tomcat
service tomcat start
這樣之后必須要在埠號之后加上我們的目錄名稱才能夠訪問到我們的專案
- 修改 tomcat組態檔
#進入tomcat的配置目錄
cd /usr/local/tomcat/apache-tomcat/conf
#編輯組態檔
vim server.xml
#輸入/Host 或者是 ?Host快速定位
?Host
#按 i 進入編輯模式 在<Host>變遷內添加下列內容
<Context path="" docBase="/usr/local/src/apache-tomcat-7.0.106/webapps/demo" debug="0" privileged="true" reloadable="true"/>
# esc 退出編輯模式保存退出
:wq!
#重啟tomcat
service tomcat stop
service tomcat start
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294326.html
標籤:其他
上一篇:rsync+inotify介紹

