1. 程式人生 > >nginx安裝和簡單部署java web專案

nginx安裝和簡單部署java web專案

1.Nginx (“engine x”) 是一個高效能的 HTTP 和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。
Nginx特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好。
Nginx由核心和模組組成,其中,核心的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查詢配置檔案將客戶端請求對映到一個location block(location是Nginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每個指令將會啟動不同的模組去完成相應的工作。
Nginx相對於Apache優點:

  1. 高併發響應效能非常好,官方Nginx處理靜態檔案併發5w/s
  2. 反向代理效能非常強。(可用於負載均衡)
  3. 記憶體和cpu佔用率低。(為Apache的1/5-1/10)
  4. 對後端服務有健康檢查功能。
  5. 支援PHP cgi方式和fastcgi方式。
  6. 配置程式碼簡潔且容易上手。
    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

http://192.168.126.129:8080/
在這裡插入圖片描述
在這裡插入圖片描述

成功。
git上配置檔案地址:https://github.com/shidebin/installationPackage