一、Nginx安装配置
1、下载 nginx pcre
1)准备 pcre-8.12.tar.gz。该文件为正则表达式库。让nginx支持rewrite需要安装这个库。
2) 准备 nginx-1.5.0.tar.gz。
3)确保进行了安装了linux常用必备支持库。
2、安装yum install gcc-c++
3、上传pcre-8.12.tar.gz, nginx-1.5.0.tar.gz 到 /usr/local/src/nginx目录下。
4、安装pcre:tar zxvf pcre-8.12.tar.gz;./configure;make;make install;
5、安装Nginx:tar zxvf nginx-1.5.0.tar.gz;./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module;make;make install;
6 、启动停止重启与测试:./nginx;nginx -s stop
7、配置:修改/nginx/conf/nginx.conf #编辑配置文件
Nginx的配置文件主要由5个部分组成:
1)main:用于进行nginx全局信息的配置,如worker_processes子进程数
2)events:用于nginx工作模式的配置
event {
worker_connections 1024;#最大可以同时接收的连接数量
multi_accept on;
use epoll;#指定了线程轮询的方法
}
3)http:用于进行http协议信息的一些配置
4)server:用于进行服务器访问信息的配置
server{
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name www.linuxidc.com ha97.com;
#图片缓存时间设置
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10d;
}
#日志格式设定
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#定义本虚拟主机的访问日志
access_log ar/loginx/linuxidcaccess.log access;
#对 "/" 启用反向代理
location / {
proxy_pass http://127.0.0.1:88;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可选。
proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
#本地动静分离反向代理配置
#所有jsp的页面均交由tomcat或resin处理
location ~ .(jsp|jspx|do)?$ {
root /nginx/www;
index index.php index.html index.htm;
}
}
5)upstream:用于进行负载均衡的配置
upstream name {
ip_hash;
server 192.168.1.100:8000;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
ip_hash:指定请求调度算法,默认是weight权重轮询调度,解决了集群部署环境下session共享的问题。
-- down:表示该主机暂停服务
- - max_fails:表示失败最大次数,超过失败最大次数暂停服务
-- fail_timeout:表示如果请求受理失败,暂停指定的时间之后重新发起请求
二、Nginx功能
Nginx基本功能:静态HTTP服务器、虚拟主机、反向代理服务器、负载均衡
1、静态HTTP服务器()
首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。
配置:
- server {
- listen80; # 端口号
- location / {
- root /usr/share/nginx/html; # 静态文件路径
- }
- }
2、反向代理服务器
什么是反向代理?
客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端。可以通过配置多个server多个location实现。
配置:
server {
listen80;
server_name 域名1;
location / {
proxy_pass http://192.168.20.1:8080; # 应用服务器HTTP地址
}
}
server {
listen80;
server_name 域名2;
location / {
proxy_pass http://192.168.20.1:8081; # 应用服务器HTTP地址
}
}
3、负载均衡
当网站访问量非常大,网站站长开心赚钱的同时,也摊上事儿了。因为网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。Nginx可以通过反向代理来实现负载均衡。
配置
- upstream myapp {
- ip_hash; # 根据客户端IP地址Hash值将请求分配给固定的一个服务器处理
- server192.168.20.1:8080weight=3; # 该服务器处理3/4请求
- server192.168.20.2:8080; # weight默认为1,该服务器处理1/4请求
- }
- server {
- listen80;
- location / {
- proxy_pass http://myapp;
- }
- }
注意proxy_pass后面的http://。
4、虚拟主机
有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。
配置:
- server {
- listen80default_server;
- server_name _;
- return444; # 过滤其他域名的请求,返回444状态码
- }
- server {
- listen80;
- server_name www.aaa.com; # www.aaa.com域名
- location / {
- proxy_pass http://localhost:8080; # 对应端口号8080
- }
- }
- server {
- listen80;
- server_name www.bbb.com; # www.bbb.com域名
- location / {
- proxy_pass http://localhost:8081; # 对应端口号8081
- }
- }
在服务器8080和8081分别开了一个应用,客户端通过不同的域名访问,根据server_name可以反向代理到对应的应用服务器。
虚拟主机的原理是通过HTTP请求头中的Host是否匹配server_name来实现的,有兴趣的同学可以研究一下HTTP协议。
另外,server_name配置还可以过滤有人恶意将某些域名指向你的主机服务器。
三、Nginx配置rewrite
1、应用场景
1、可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
2、为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
3、网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com
4、根据特殊变量、目录、客户端的信息进行URL调整等
2、实现
server {
listen 80;
server_name abc.com;
rewrite ^/(.*) http://www.abc.com/$1 permanent;
}
server {
listen 80;
server_name www.abc.com;
location / {
root /data/www/www;
index index.html index.htm;
}
error_log logs/error_www.abc.com.log error;
access_log logs/access_www.abc.com.log main;
}