nginx安裝和簡單部署java web專案
阿新 • • 發佈:2018-12-18
1.Nginx (“engine x”) 是一個高效能的 HTTP 和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。
Nginx特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好。
Nginx由核心和模組組成,其中,核心的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查詢配置檔案將客戶端請求對映到一個location block(location是Nginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每個指令將會啟動不同的模組去完成相應的工作。
Nginx相對於Apache優點:
- 高併發響應效能非常好,官方Nginx處理靜態檔案併發5w/s
- 反向代理效能非常強。(可用於負載均衡)
- 記憶體和cpu佔用率低。(為Apache的1/5-1/10)
- 對後端服務有健康檢查功能。
- 支援PHP cgi方式和fastcgi方式。
- 配置程式碼簡潔且容易上手。
2.Nginx的高併發得益於其採用了epoll模型,與傳統的伺服器程式架構不同,epoll是linux核心2.6以後才出現的。Nginx採用epoll模型,非同步非阻塞,而apache採用的是select模型:
Select特點:select 選擇控制代碼的時候,是遍歷所有控制代碼,也就是說控制代碼有事件響應時,select需要遍歷所有控制代碼才能獲取到哪些控制代碼有事件通知,因此效率是非常低。
epoll的特點:epoll對於控制代碼事件的選擇不是遍歷的,是事件響應的,也就是說當某一控制代碼有事件時就選出來,不需要遍歷整個控制代碼連結串列,因此效率非常高。
3.nginx的安裝
1.先安裝依賴;
yum -y install gcc gcc-c++ autoconf automake
yum -y install PCRE pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
2.安裝nginx
cd /usr/local/source wget http://nginx.org/download/nginx-1.9.0.tar.gz tar -zxvf nginx-1.6.2.tar.gz mv nginx-1.6.2 /usr/local/nginx cd /usr/local/nginx/
#預編譯Nginx
useradd www;
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#.configure預編譯成功後,執行make命令進行編譯
make
#make執行成功後,執行make install 正式安裝
make install
mkdir logs
/usr/local/nginx/sbin/nginx -t
檢查nginx配置檔案是否正確
/usr/local/nginx/sbin/nginx
啟動nginx
ps -aux | grep nginx
檢視nginx程序
重啟nginx
/usr/local/nginx/sbin/nginx -s reload
停止nginx
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
檢視nginx版本
/usr/local/nginx/sbin/nginx -v
nginx檔案詳解
user www www; #使用什麼使用者啟動NGINX 在執行時使用哪個使用者哪個組
worker_processes 4; #啟動程序數,一般是1或8個,根據你的電腦CPU數,一般8個
worker_cpu_affinity 00000001 00000010 00000100 00001000; #CPU邏輯數---為每個程序分別綁在CPU上面,為每個程序分配一個CPU
#pid /usr/local/nginx/logs/nginx.pid
worker_rlimit_nofile 102400; #一個worker_processe程序開啟的最大檔案數目,與NGINX併發連線有關係
#工作模式及連線數上限
events
{
use epoll; #多路複用IO 基於LINUX2.6以上核心,可以大大提高NGINX的效能
worker_connections 102400; #單個worker process最大連線數,其中NGINX最大連線數=連線數*程序數(4), 一般1GB記憶體的機器上可以開啟的最大數大約是10萬左右
multi_accept on; #儘可能多的接受請求,預設是關閉狀態
}
#處理http請求的一個應用配置段
http
{
include mime.types;#引用mime.types,這個型別定義了很多,當web伺服器收到靜態的資原始檔請求時,依據請求檔案的字尾名在伺服器的MIME配置檔案中找到對應的MIME Type,根據MIMETYPE設定並response響應型別(Content-type)
default_type application/octet-stream;#定義的資料流,有的時候預設型別可以指定為text,這跟我們的網頁釋出還是資源下載是有關係的
fastcgi_intercept_errors on; #表示接收fastcgi輸出的http 1.0 response code
charset utf-8;
server_names_hash_bucket_size 128; #儲存伺服器名字的hash表
(配置不對會報錯: #could not build the server_names_hash, you should increase server_names_hash_bucket_size: 64)
client_header_buffer_size 4k;#用來快取請求頭資訊的、,容量4K,如果header頭資訊請求超過了,nginx會直接返回400錯誤,先根據client_header_buffer_size配置的值分配一個buffer,如果分配的buffer無法容納 request_line/request_header,那麼就會再次根據large_client_header_buffers配置的引數分配large_buffer,如果large_buffer還是無法容納,那麼就會返回414(處理request_line)/400(處理request_header)錯誤。
large_client_header_buffers 4 32k;
client_max_body_size 300m; #允許客戶端請求的最大單檔案位元組數
sendfile on; #指定NGINX是否呼叫這個函式來輸出檔案,對於普通的檔案我們必須設定為ON,如果NGINX專門做為一個下載端的話可以關掉,好處是降低磁碟與網路的IO處理數及系統的UPTIME
#autoindex on;開啟目錄列表訪問,適合下載伺服器
tcp_nopush on; #防止網路阻塞
keepalive_timeout 60;#非常重要,根據實際情況設定值,超時時間,客戶端到服務端的連線持續有效時間,60秒內可避免重新建立連線,時間也不能設太長,太長的話,若請求數10000,都佔用連線會把服務託死
tcp_nodelay on;#提高資料的實時響應性
client_body_buffer_size 512k; #緩衝區代理緩衝使用者端請求的最大位元組數(請求多)
proxy_connect_timeout 5; #nginx跟後端伺服器連線超時時間(代理連線超時)
proxy_read_timeout 60; #連線成功後,後端伺服器響應時間(代理接收超時)
proxy_send_timeout 5; #後端伺服器資料回傳時間(代理髮送超時)
proxy_buffer_size 16k; #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小
proxy_buffers 4 64k;#proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設定
proxy_busy_buffers_size 128k; #高負荷下緩衝大小
proxy_temp_file_write_size 128k; #設定快取資料夾大小,大於這個值,將從upstream伺服器傳
gzip on; #NGINX可以壓縮靜態資源,比例我的靜態資源有10M,壓縮後只有2M,那麼瀏覽器下載的就少了
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;#壓縮級別大小,最小1,最大9,值越小,壓縮後比例越小,CPU處理更快,為1時,原10M壓縮完後8M,但設為9時,壓縮完可能只有2M了
gzip_types text/plain application/x-javascript text/css application/xml; 壓縮型別:text,js css xml 都會被壓縮
gzip_vary on; #作用是在http響應中增加一行目的是改變反向代理伺服器的快取策略
#日誌格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #ip 遠端使用者 當地時間 請求URL
'$status $body_bytes_sent "$http_referer" ' #狀態 傳送的大小 響應的頭
'"$http_user_agent" $request_time'; #客戶端使用的瀏覽器 頁面響應的時間
@動態轉發
upstream web1 {
ip_hash; #每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s; #機器效能不一樣weight不一樣
server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
}
upstream web2 {
server 127.0.0.1:8082 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8083 weight=1 max_fails=2 fail_timeout=30s;
}
include vhosts.conf;
}
vhosts.conf的配置
server {
listen 80;
server_name www.james1.com; #域名(域名和埠寫一個即可,倆個都寫只識別listen)
index index.jsp index.html index.htm;
root html;#定義伺服器的預設網站根目錄位置
location /
{
proxy_next_upstream http_502 http_504 error timeout invalid_header; #如果後端的伺服器返回502、504、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另一臺伺服器,實現故障轉移。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web2;
}
location ~ .*\.(php|jsp|cgi|shtml)?$ #動態分離 ~匹配 以.*結尾(以PHP JSP結尾走這段)
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web2;
}
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ #靜態分離 ~匹配 以.*結尾(以PHP JSP結尾走這段),當然不是越久越好,如果有10000個使用者線上,都儲存幾個月,系統託跨
{
root /var/local/static; //靜態資源所放位置
expires 30d;
}
#日誌級別有[debug|info|notice|warn|error|crit]
error_log 級別分為 debug, info, notice, warn, error, crit 預設為crit,
#生產環境用error
#crit 記錄的日誌最少,而debug記錄的日誌最多
access_log /usr/local/logs/web2/access.log main;
error_log /usr/local/logs/web2/error.log crit;
}
4.nginx測試
加入java專案,啟動tomcat(如果沒有安裝,按我的在linux部署java專案的部落格安裝)
cd /usr/local/apache/tomcat8/webapps
rz
systemctl start tomcat
修改nginx.conf檔案
upstream web1 {
server 192.168.126.128:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.126.128:8081 weight=1 max_fails=2 fail_timeout=30s;
}
/usr/local/nginx/sbin/nginx -s reload
成功。
git上配置檔案地址:https://github.com/shidebin/installationPackage