https://blog.csdn.net/jethai/article/details/52345302
應用層的負載均衡
master/worker結構:一個master進程,生成一個或多個worker子進程
nginx請求的連接方式
epoll 是Linux下多路復用IO接口select/poll的增強版本
select 遍歷
epoll無需遍歷
1.nginx安裝(未安裝郵件服務器模塊)
./configure --help查看編譯選項
配置文件中路徑沒加/以prefix指定的路徑開始
./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi \
--with-http_stub_status_module
make && make install
2.nginx配置
nginx -t -c /etc/nginx/nginx.conf檢測配置文件是否有語法錯誤
ps aux|grep nginx
#設置工作進程數,一般與cpu的核數一致
work_processes 2;
events {
#單個進程最大連接數,超過就等待在隊列排隊
worker_connections 1024;
}
http{
#日志格式定義
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_refer" '
'"$http_user_agent" "$http_x_forward_for"';
#Linux內存 操作系統和驅動程序運行在內核層,應用程序運行在用戶層
sendfile on;
keepalive_timeout 65;
#啟用壓縮功能
gzip on;
#反向代理緩存目錄
proxy_cache_path /data/proxy/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=1g;
#負載均衡
upstream my_server_pool {
server 192.168.1.109:80 weight=1 max_fails=2 fail_timeout=30;
server 192.168.1.10:80 weight=2 max_fails=2 fail_timeout=30;
}
#虛擬主機配置
server {
listen 192.168.1.1:80 default_server;
server_name www.example.org;
root /var/www/web1;
}
server{
listen 80;
server_name www8.example.org;
root /var/www/web2;
#根據不同的瀏覽器URL重寫
if($http_user_agent ~ Firefox){
rewrite ^(.*)$ /firefox/$1 break;
}
if($http_user_agent ~ MSIE){
rewrite ^(.*)$ /msie/$1 break;
}
#實現域名跳轉
location / {
rewrite ^/(.*)$ https://web8.example.com$1 permanent;
}
index index.html;
#日志緩沖區
access_log /var/log/nginx/www8.example.com-access.log main buffer=32k;
error_log /var/log/nginx/www8.example.com-error.log warn;
#什么樣的日志文件描述符放到緩存中
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
#防止盜鏈
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.test.com*.test.com;
if($invalid_refer) {
rewrite ^/(.*) http://www.test.com/block.html;
}
}
#瀏覽器本地緩存設置
#靜態頁面
location ~ .*\.(gif|jpg|jpge|png|bmp|swf|flv)$ {
expires 30d;
}
#動態頁面
location ~ .*\.(js|css)$ {
expires 1h;
}
location /data {
#自動索引開啟,列出目錄下的文件
autoindex on;
#將/data目錄重寫為/bbs
rewrite ^/data/?$ /bbs permanent;
#控制訪問,相當於防火牆
deny 192.168.0.132;
allow 192.168.0.0/24;
allow 192.168.1.1;
deny all;
#只允許.htpasswd文件中的用戶訪問
#賬號生成口令htpasswd -c /home/test1/a/.htpasswd username
#系統會要求輸入兩遍該用戶的密碼。
#修改密碼也是同樣 htpasswd -c /home/test1/a/.htpasswd username
auth_basic "AwstatAuth";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location /bbs {
index index.html
}
location /b {
#uri別名,路徑過長簡寫
alias /var/www/web2/data/redhat;
}
location /nginx_status {
#nginx狀態檢查,用於監控nginx狀態
stub_status on;
#不記錄日志
access_log off;
}
#自定義錯誤頁面
error_page 403 404 /40x.html;
location /40x.html {
root /var/www/error;
}
}
#https訪問 https://
server {
listen 443;
server_name web8.example.com;
ssl on;
ssl_certificate /etc/pki/tls/certs/httpd.crt;
ssl_certificate_key /etc/pki/tls/private/httpd.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_cihers on;
location / {
root /var/www/web3;
index index.html index.htm
}
#url重寫和反向代理同時進行
location /sports/ {
proxy_pass http://192.168.0.2;
}
location /news/ {
proxy_pass http://192.168.0.109:8080/bbs;
proxy_cache_valid 200 10m;
proxy_cache_valid 304 1m;
proxy_cache_valid 301 302 1h;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host; //后端日志記錄的是遠端地址而不是代理服務器本身
proxy_cache cache_one;//引用cache
proxy_set_header X-Forwarded-For $remote_addr;
}
#流媒體限速
location /downlod {
limit_rate_after 20m;//前20M不限速
limit_rate 256K;
}
#反向代理加負載均衡
location /sms {
proxy_pass http://my_server_pool;
}
}
}
nginx uri匹配規則(location)
語法:location [=|~|~*|^~] /uri/ {...}
=:精確匹配
~:區分大小寫
~*:不區分大小寫
^~:禁止正則表達式匹配
地址重寫rewrite
if指令\return 指令\set rewrite 指令
301 permanent 永久重定向,新網址完全繼承舊網址,舊網址的排名等完全清零
302 redirect 臨時重定向 對舊網址沒有影響,但新網址沒有排名
304 代表頁面來自緩存
rewrite 最后一項參數為flag標記
1.last 瀏覽器URL地址不變
2.break 瀏覽器URL地址不變
3.redirect 瀏覽器會顯示跳轉后的url
4.permanent 瀏覽器會顯示跳轉后的url
last會對server標簽重新發起一個新的請求,再次進入server塊,重試location匹配
break 直接使用當前location的資源來訪問,不再執行location里余下的語句,完成本次請求
一般在根location或server標簽中推薦使用last標記,在非根location中,使用break
nginx日志管理(緩存)
日志分割腳本(防止日志文件變得很龐大),每天分割一次
vim /data/logs.sh
#! /bin/bash
#Nginx日志存放位置
logs_path="/data/logs/"
#將日志改名
mkdir -p ${logs_path}${date -d "yesterday" +"%Y"}/${date -d "yesterday" +"%m"}/
mv ${logs_path}access.log ${logs_path}${date -d "yesterday" +"%Y"}/${date -d "yesterday" +"%m"}/access_${date -d "yesterday" +"%Y%m%d"}.log
#重啟Nginx服務,重新生成access.log文件
service nginx reload
#創建計划任務
#crontab -|
01 01 * * * /bin/bash /data/logs.sh
負載均衡
upstream my_server_pool {
}
把指定的輸入文件拷貝到指定的輸出文件中,並且在拷貝的過程中可以進行格式轉換
dd if=/dev/zero of=test bs=1M count=100
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/75/10/wKiom1YxtzWAUYLGAAX8kTBNTDU235.jpg" style="float:none;" title="譽天鄒老師Nginx網站架構04-Nginx日志管理和限速.wmv_20151029_094023.869.jpg" alt="wKiom1YxtzWAUYLGAAX8kTBNTDU235.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/75/0D/wKioL1Yxt2vjVK_kAASI482Fpcw903.jpg" style="float:none;" title="譽天鄒老師Nginx網站架構02-Nginx虛擬主機及相關配置.wmv_20151028_214327.888.jpg" alt="wKioL1Yxt2vjVK_kAASI482Fpcw903.jpg" />
————————————————
版權聲明:本文為CSDN博主「小小程序員1986」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jethai/article/details/52345302