构建 Nginx WEB 服务器
Nginx WEB 入门简介
Nginx 主要用于反向代理。它由内核和模块组成,其中内核的设计非常微小和简洁,仅仅通过查找配置文件将客户端请求映射到一个 location block(location 是 Nginx 配置中的一个指令,用于 URL 匹配),而在这个 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。
常用命令
检查nginx配置文件是否正确:/usr/local/nginx/sbin/nginx -t
启动nginx:/usr/local/nginx/sbin/nginx
附重启:/usr/local/nginx/sbin/nginx -s reload
查看进程:ps -ef |grep nginx
Nginx 虚拟主机配置
server {
listen 80;
server_name location --可改成对应域名
location / { --location block
root html/dirName; --发布路径
index index.html index.htm; --默认引导页
}
}
Nginx 负载均衡配置*
#服务器的集群
upstream fzjh.com { #服务器集群名字
server 127.0.0.1:18081 weight=1; #服务器配置 weight即权重
server 127.0.0.1:18082 weight=2;
}
#当前的Nginx的配置
server {
listen 80; #监听端口
server_name localhost; #当前服务的域名
location / {
proxy_pass http://fzjh.com;
proxy_redirect default;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
附:ip_hash与 url_hash
#ip_hash 通过客户端请求ip进行hash,再通过hash值选择后端server
upstream backend{
ip_hash;
server 192.168.128.1:8080;
server 192.168.128.2:8080;
}
server {
listen 8081;
server_name test.csdn.net;
root /home/system/test.csdn.net/test;
location ^~ /Upload/upload {
proxy_pass http://backend;
}
}
#url_hash 通过请求url进行hash,再通过hash值选择后端server
upstream somestream {
hash $request_uri;
server 192.168.244.1:8080;
server 192.168.244.2:8080;
}
server {
listen 8081 default;
server_name test.csdn.net;
charset utf-8;
location /get {
proxy_pass http://somestream;
}
}
Nginx 动静分离
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
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://tdt_wugk;
expires 3d;
}
#动态页面交给 http://tdt_wugk,即之前定义的upstream tdt_wugk均衡
location ~ .*\.(php|jsp|cgi)?$
{
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://tdt_wugk;
}
#配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /data/www/wugk;
expires 3d; #定义用户浏览器缓存的时间为3天
}
其他配置
worker_processes 1; #工作进程的个数,一般与计算机的cpu核数一致
events {
worker_connections 1024; #单个进程最大连接数(最大连接数=连接数*进程数)
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
sendfile on; #开启高效文件传输模式
keepalive_timeout 65; #长连接超时时间,单位是秒
gzip on; #启用Gizp压缩
server {
...
}
}
Nginx Rewrite
Rewrite 规则的最后一项参数为 flag 标记,支持的 flag 标记主要有以下几种:
1) last:相当于 Apache 里德(L)标记,表示完成 rewrite
2) break:本条规则匹配完成后,终止匹配,不再匹配后面的规则
3) redirect:返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址
4) permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址
5) last 和 break 用来实现 URL 重写,浏览器地址栏 URL 地址不变
#在server中加入如下语句即可:
rewrite ^/(.*)$ http://www.xx.com/index.html redirect;
#常用于多个域名跳转到同一个域名,见下
server_name www.wugk.com wugk.com;
if ($host != ‘www.wugk.com’ ) {
rewrite ^/(.*)$ http://www.wugk.com/$1 permanent;
}
Nginx location 规则匹配
-
“= ”,字面精确匹配, 如果匹配,则跳出匹配过程(不再进行正则匹配)
-
“^~ ”,最大前缀匹配,如果匹配,则跳出匹配过程(不再进行正则匹配)
-
/ 不带任何前缀:最大前缀匹配,eg. location / 在没有正则表达式匹配的情况下才匹配(优先级最低)
-
“~ ”,大小写相关的正则匹配
-
“~* ” , 大小写无关的正则匹配
-
“@”, Named location 不是普通的 location 匹配,而是用于 location 内部重定向 的变量
优先级别: (location =) > (location 完整路径) > (location ^~ 路径) > (location ~* 正则) > (location 路径)
Nginx 日志分析
1) 分析截止目前为止访问量最高的 IP 排行
awk '{print $1}' /usr/local/nginx/logs/access.log|sort |uniq -c |sort -nr |head -20
2) 找到当前日志中 502 或者 404 错误的页面并统计
awk '{print $0}' /usr/local/nginx/logs/access.log|egrep "404|502"|awk '{print $1,$7,$9}'|more
Nginx 性能压测及评估
命令:./ab [options] [http://]hostname[:port]/path
-n 测试会话中所执行的请求个数,默认执行一个请求
-c 一次产生的请求个数,默认是一次一个
-t 测试所进行的最大秒数
-v 设置显示信息的详细程度
-V 显示版本号并退出。
./ab -c 1000 -n 1000 http://www.jfedu.net/index.php
Nginx集群
Nginx + Keepalived主从架构、双主架构