nginx配置详解-url重写、反向代理、负载均衡

应用层的负载均衡

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

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1707660

时间: 2024-10-22 05:40:45

nginx配置详解-url重写、反向代理、负载均衡的相关文章

nginx 详解反向代理负载均衡

什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web 服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式. 实现这个反向代理能力并不能算是一个特别复杂的任务,但是在负载均衡中要求特别高的效率,这样实现起来

如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/负载均衡服务器

Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动发现.它可以让我们更加专注于应用的开发,而不是基础架构.Weave 提供了一个如此棒的环境,仿佛它的所有容器都属于同个网络,不需要端口/映射/连接等的配置.容器中的应用提供的服务在 weave 网络中可以轻易地被外部世界访问,不论你的容器运行在哪里.在这个教程里我们将会使用 weave 快速并且简单

Apache实现反向代理负载均衡

说到负载均衡LVS这套技术,有很多种实现方法. 本文所说,主要就是利用apache服务器实现反向代理,实现负载均衡. 首先,传统的正向代理如下图所示,正如我们用的游戏加速代理,大多的个人PC把请求发给正向代理服务器,代理服务器通常配置高端的带宽,替我们请求相应的服务. 而负载均衡中的反向代理,通常意义上,是一个请求转发的代理.类似一个收发室的管理人员,外来的很多邮件,传到收发室,然后由管理员分配给不同的办公室.通过这样的操作,可以使每台服务器避免过多的负载导致宕机.而转发的这个过程,通常也有很多

详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南_nginx

Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而Nginx是轻量级的服务器.Apache服务器稳定.开源.跨平台,但是Apache服务器不支持高并发,Nginx能支持处理百万级的TC

nginx配置详解

转载文章,转载自: http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html Nginx配置文件详细说明 在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户 user www-data;     #启动进程,通常设置成和cpu的数量相等 worker_processes  1; #全局错误日志及PID文件 error_log  /var/log/nginx/error.l

nginx调用php-fpm出错解决方法和nginx配置详解_nginx

装完了nginx和php-5.5,配置好了nginx调用php后,就开始启动php-fpm. 使用下面的命令 复制代码 代码如下: /usr/local/php/sbin/php-fpm 就可以启动了. 在nginx的目录中创建个php的检测脚本index.php 结果在打开http://localhost/index.php 悲剧的发现居然无法打开 .查看日志文件,看了下报错原因 复制代码 代码如下: 2013/07/01 22:34:26 [error] 3214#0: *64 FastCG

centos下配置Nginx反向代理负载均衡服务器教程

准备: Proxy-Server:1.1.1.22(负载均衡服务器) Nginx-Server23:1.1.1.23(web23) Nginx-Server24:1.1.1.24(web24) 环境版本: Linux Nginx-Proxy 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ①:安装配置完成Nginx WEB服务器预配置: [root@Nginx-Ser

FreeBSD反向代理负载均衡

前面提到了使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.然而,也可以考虑这样一种技术,使用代理服务器将请求均匀转发给多台Web服务器上,从而达到负载均衡的目的. Apache开发组的一位成员Ralf S.Engelschall基于Apache的代理模块mod_proxy开发了反向代理模块mod_rproxy,用于实现负载均衡. 这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是代理多个客户

Nginx 配置详解

    # This number should be, at maximum, the number of CPU cores on your system.     # (since nginx doesn't benefit from more than one worker per CPU.)     # 这里的数值不能超过 CPU 的总核数,因为在单个核上部署超过 1 个 Nginx 服务进程并不起到提高性能的作用.     worker_processes 24;     # Num