nginx安裝、配置、負責均衡、tomcat的動靜分離
阿新 • • 發佈:2018-11-08
nginx下載安裝
nginx下載地址:nginx下載地址
安裝編譯器和依賴庫
yum install gcc gcc-c++ zlib-devel pcre-devel openssl-devel openssl-libs openssl -y
配置:
./configure
nginx安裝:
到nginx根目錄執行 : make && make install
安裝完成,接下來配置環境變數以後就不用使用絕對路徑來操作Nginx了:
vim /etc/profile.d/http.sh
加入以下內容:
export PATH=/usr/local /nginx/sbin:$PATH
生效配置:
source !$
啟動Nginx
nginx -s 後跟stop、reload來關閉和過載nginx,直接執行nginx則啟動服務。 如果啟動時提示埠被佔用,則需要找出被佔用的程序,或者更改/usr/local/nginx/conf/nginx.conf檔案裡的偵聽埠。
訪問Nginx
在瀏覽器上輸入 http://ip:port 如果出現“Welcome to nginx!”字樣,則證明安裝成功。如果訪問不了,先確認防火牆是否禁止相應埠了。
nginx簡單的配置講解(/usr/local/nginx/ngnix.conf檔案)
http{
負載均衡配置;
server配置;
}
#開啟程序數 <=CPU數
worker_processes 1;
#自定義錯誤日誌儲存位置,全域性設定,預設logs/error.log
#error_log logs/error.log;
#每個程序最大連線數(最大連線=連線數x程序數)每個worker允許同時產生多少個連結,預設1024
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"';
#自定義全域性請求日誌儲存位置,全域性設定,預設logs/access.log, 定義格式:檔案儲存位置 + 日誌輸出格式
#access_log logs/access.log main;
#打開發送檔案
sendfile on;
#連線超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
#開啟gzip壓縮
#gzip on;
#配置虛擬主機,基於域名、ip和埠,可以配置多個server
server {
#監聽埠,可以是ip:port 或者 port
listen 80;
#監聽域名,可以是ip或者域名,server_name有三種匹配方式:精準匹配(www.domain.com)、萬用字元匹配(*.domain.com 、www.*)、正則表示式匹配(~^(?.+)\.domain\.com$)
server_name localhost;
#自定義請求日誌,區域性,當前server有效
#access_log logs/host.access.log main;
#錯誤頁面及其返回地址
error_page 500 502 503 504 /50x.html;
#請求匹配,同樣有精準(= /index.html)、模糊(~ index)、正則,允許配置多個location
location / {
#返回根路徑地址(相對路徑:相對於/usr/local/nginx/)
root html;
#預設主頁
index index.html index.htm;
}
#
location /html {
root html;
index index.html index.htm;
}
#
}
#
}
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 {
worker_connections 1024;
}
http {
##設定mine型別,型別由mime.type檔案定義
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;
##nginx呼叫sendfile函式來輸出檔案,對於普通應用必須為on。如果用來進行下載磁碟IO重負載應用##可以已設定為off
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
##長連結超時時間,單位秒
keepalive_timeout 65;
#gzip on;
#負載均衡
upstream balance {
#預設輪詢,url_hash 根據url均衡 ip_hash 根據ip均衡 least_conn;輪詢
# ip_hash;
#ip_hash;
least_conn;
#weight 值越大,負載權重越大,請求次數越多
#max_fails 允許請求失敗的次數,超過失敗次數後,轉發到下一個伺服器,當有max_fails個請求失敗,就表示後端的伺服器不可用,預設為1,將其設定為0可以關閉檢查
#fail_timeout 指定時間內無響應則失敗, 在以後的fail_timeout時間內nginx不會再把請求發往已檢查出標記為不可用的伺服器
#down 表示當前server不參與負載
#backup 其他非backup server都忙的時候,backup server作為備用伺服器,將請求轉發到backup伺服器
server 192.168.1.4 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.20:8080 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8081 down;
#server 192.168.58.152:8080 backup;
}
##新建站點
server {
listen 80;
server_name test.com;
#自定義請求日誌,區域性,當前server有效
#access_log logs/test.com.log main;
#charset koi8-r;
#access_log logs/host.access.log main;
#靜態資源
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
#靜態資源到nginx伺服器下static(具體目錄自定義)獲取
root static;
}
#動態資源
location ~ \.(jsp|jspx|do|action)(\/.*)?$ {
#動態請求轉發到tomcat伺服器,匹配方式可自定義
#設定真實
proxy_set_header real_ip $remote_addr; #real_ip 設定變數名,可以通過web端獲取
#我這裡tomcat的埠為80
#proxy_pass http://192.168.1.4;
proxy_pass http://balance; #配置上面新增的負載伺服器
}
#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;
#}
}
server{
listen 80;
return 500;
}
# 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;
# }
#}
}
負載平衡配置示例
#user nobody;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
accept_mutex on; #設定網路連線序列化,防止驚群現象發生,預設為on
multi_accept on; #設定一個程序是否同時接受多個網路連線,預設為off
worker_connections 1024;#最大連線數
}
http {
include mime.types;#副檔名與檔案型別對映表,此對映表主要用於部署在本nginx上的靜態資源
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;
#反向代理
#【配置1】此配置是[配置4]和[配置5]的結合
#此配置將請求轉發到兩個WEB伺服器,根據客戶端IP分配目標主機,同時按權重分配流量
upstream app1 {
ip_hash;
server 192.168.14.132:8080 weight=5;
server 192.168.14.133:80 weight=3;
}
#【配置2】
#預設負載平衡配置,nginx應用HTTP負載平衡來分發請求。
#upstream app1 {
# server 192.168.14.132:8080;
# server 192.168.14.133:80;
#}
#【配置3】
#最小連線負載平衡配置,nginx將盡量不使用繁忙的伺服器,而是將新請求分發給不太忙的伺服器。
#upstream app1 {
# least_conn;
# server 192.168.14.132:8080;
# server 192.168.14.133:80;
#}
#【配置4】
#會話永續性配置,使用ip-hash,客戶端的IP地址用作雜湊金鑰,
#以確定應為客戶端請求選擇伺服器組中的哪個伺服器。
#此方法確保來自同一客戶端的請求將始終定向到同一伺服器,除非此伺服器不可用。
#upstream app1 {
# ip_hash;
# server 192.168.14.132:8080;
# server 192.168.14.133:80;
#}
#【配置5】
#加權負載平衡配置,通過使用伺服器權重進一步影響nginx負載平衡演算法。
#未配置權重的伺服器,意味著所有指定的伺服器被視為對特定負載平衡方法同等資格。
#upstream app1 {
# ip_hash;
# server 192.168.14.132:8080 weight=3;
# server 192.168.14.133:80 weight=2;
# server 192.168.14.134:80;
# server 192.168.14.135:80;
#}
server {#可配置多個server以監聽不同IP和不同埠
listen 80;#監聽的埠
server_name localhost;#監聽的伺服器
#charset koi8-r;
#access_log logs/host.access.log main;
#反斜杆代表所有連線,此配置目的是將所有連線交給名為app1的upstream代理,實現負載平衡
location / {
proxy_pass http://app1;
}
#圖片檔案路徑,一般來說,靜態檔案會部署在本機以加快響應速度
#可配置多個這樣的location,滿足各種需求
location ~\.(gif|jpg|png)$ {
root /home/root/images;
}
location ~\.(iso|zip|txt|doc|docx)$ {
root /home/root/files;
}
#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;
}
# FastCGI是CGI全稱是“公共閘道器介面”(Common Gateway Interface)
#對於我來說,使用Tomcat代替即可,請忽略此配置。
#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;
#}
# 新增黑名單,禁止某某訪問特定檔案
# 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;
# }
#}
}
最後附上一個獲取ip的jsp demo
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome to my demo.jsp</title>
</head>
<body>
歡迎 my demo.jsp<br/>
訪問的 ip 地址: <%=request.getHeader("real_ip") %> <br/>
nginx server ip is: <%=request.getRemoteAddr()%>
</body>
</html>