<服务>Nginx服务
目录:
Nginx
Nginx本身是一款静态web服务,支持epoll模型,具备高并发和占用内存资源少的特点。
Nginx功能
- web服务
- 负载均衡(反向代理)
- web cache(web缓存)
Nginx优点
- 支持功能多
- 高并发
- 占用资源少
- 可以限制IP和链接数
Nginx应用场合
- 静态服务(视频,图片) 并发1~3w
- 动态服务 500~1500
- 反向代理,负载均衡 一般日pv2000w以下
- 缓存服务
反向代理可以理解为,负载均衡服务器获取请求,再重新发送请求给目标服务器
正向代理由路由器代理请求,缓存内容在路由器
安装Nginx
编译安装nginx
[root@why-2 nginx-1.6.3]# useradd nginx -s /sbin/nologin -M
[root@why-2 yum.repos.d]# yum install -y pcre pcre-devel openssl openssl-devel
[root@why-2 ~]# wget http://nginx.org/download/nginx-1.6.3.tar.gz
nginx默认会安装绝大多数模块
[root@why-2 nginx-1.6.3]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx1.6.3 --with-http_stub_status_module --with-http_ssl_module
[root@why-2 nginx-1.6.3]# make && make install
[root@why-2 nginx-1.6.3]# ln -s /usr/local/nginx1.6.3/ /usr/local/nginx
[root@why-2 nginx-1.6.3]# /usr/local/nginx/sbin/nginx -t #检测语法
nginx: the configuration file /usr/local/nginx1.6.3/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx1.6.3/conf/nginx.conf test is successful
[root@why-2 nginx-1.6.3]# /usr/local/nginx/sbin/nginx #启动nginx
检测nginx服务
[root@why-2 nginx-1.6.3]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 10570 root 6u IPv4 165016 0t0 TCP *:http (LISTEN)
nginx 10571 nginx 6u IPv4 165016 0t0 TCP *:http (LISTEN)
[root@why-2 nginx-1.6.3]# ps aux | grep nginx
root 10570 0.0 0.0 45000 1044 ? Ss 03:13 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 10571 0.0 0.0 45428 1900 ? S 03:13 0:00 nginx: worker process
root 10576 0.0 0.0 103264 852 pts/0 S+ 03:15 0:00 grep nginx
[root@why-2 nginx-1.6.3]# curl 192.168.0.202
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
进入IP地址
可能会遇到的问题
如果遇到error while loading shared libraries: libpcre.so
find / -name libpcre.so*
两种解决办法:把路径写入到/etc/ld.so.conf或这个软链到/lib64下,ldconfig生效
一般web服务检查方式
- ping 192.168.0.202 物理上通不通
- telnet 192.168.0.202:80 web服务没开
- crul 192.168.0.202
Nginx模块
核心模块
Main
Events
经典模块
Core
Access
FastCGI
Gzip #压缩模块
Log #日志模块
Proxy
Rewrite #URL重写模块
Upsrtream #负载均衡模块
缺省情况下核心模块和经典模块都会安装
文件目录
[root@why-2 nginx-1.6.3]# tree /usr/local/nginx/
/usr/local/nginx/
├── client_body_temp #客户端内容临时文件
├── conf #配置
│ ├── fastcgi.conf #配合动态文件的配置文件
│ ├── fastcgi.conf.default
│ ├── fastcgi_params #配合动态文件的配置文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types
│ ├── mime.types.default
│ ├── nginx.conf #主配置文件
│ ├── nginx.conf.default
│ ├── scgi_params
│ ├── scgi_params.default
│ ├── uwsgi_params
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp
├── html #站点目录
│ ├── 50x.html
│ └── index.html
├── logs
│ ├── access.log
│ ├── error.log
│ └── nginx.pid
├── proxy_temp
├── sbin
│ └── nginx
├── scgi_temp
└── uwsgi_temp
9 directories, 21 files
配置文件
主配置文件
注:配置以;结尾
[root@why-2 nginx-1.6.3]# egrep -v "#|^$" /usr/local/nginx/conf/nginx.conf
worker_processes 1; worker子进程数量,一般按着核数来,如果你设置为2,ps -ef就能看到2个worker进程
events {
worker_connections 1024; 每个worker处理的最大请求
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / { #url跳转
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
#user nobody; 默认用户
#access_log logs/access.log main; 是否记录访问日志
fastcgi.conf
fastcgi.conf中为系统参数的调用,一般不用修改
nginx虚拟主机
基于域名
[root@why-2 nginx-1.6.3]# egrep -v "#|^$" /usr/local/nginx/conf/nginx.conf.default > /usr/local/nginx/conf/nginx.conf
service添加
server {
listen 80;
server_name www.why.cn;
location / {
root html/why;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.why2.cn;
location / {
root html/why2;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.why3.cn;
location / {
root html/why3;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
生成根目录和主页文件
[root@why-2 nginx-1.6.3]# for n in why why2 why3 ;do mkdir /usr/local/nginx/html/$n ;done
[root@why-2 nginx-1.6.3]# for n in why why2 why3 ;do echo "www.$n.com"> /usr/local/nginx/html/$n/index.html ;done
[root@why-2 nginx-1.6.3]# for n in why why2 why3 ;do cat /usr/local/nginx/html/$n/index.html ;done
www.why.com
www.why2.com
www.why3.com
[root@why-2 nginx-1.6.3]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx1.6.3/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx1.6.3/conf/nginx.conf test is successful
[root@why-2 nginx-1.6.3]# /usr/local/nginx/sbin/nginx -s reload
配置本地hosts文件
192.168.0.202 www.why.cn www.why2.cn www.why3.cn
基于端口解析
修改server标签中的listen即可
基于IP解析
修改server标签中的listen,例如listen 192.168.0.202:80
nginx状态信息显示
主配置文件
server {
listen 80;
server_name www.why4.cn;
stub_status on;
access_log off;
}
状态信息含义
- Active connections #正在处理的连接数
- server #共处理多少连接数
- accepts #成功创建多少次握手
handled requests #共处理多少请求
Reading读取到的header数
- Writing返回的header数
- Waiting已经处理完正在等待下一次请求指令的驻留连接
开启keep-alive情况下数值为active-(reading+write)
握手次数-连接数=丢失请求数
nginx别名
通过server标签中的server_name定义,以空格分隔即可。 例如:
server {
listen 80;
server_name www.why.cn www.why5.cn;
location / {
root html/why;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
301重定向
server {
listen 80;
server_name www.why6.cn;
rewrite ^/(.*) http://www.why.cn/$1 permanent;
# 格式rewrite 正则表达式 替换目标 flag
# /前代表域名,/后为所有请求的url $1为所有请求的url permanent301跳转
}
一般情况下可以用于IP地址访问 url重定向到我们的域名上。 或者网站使用新的域名。
Nginx 301重定向域名http://www.cnblogs.com/benio/archive/2010/08/16/1800584.html
一般默认情况下,如果不设置的话,我们访问ip地址时url会为IP地址,默认为第一个server的空间。
解决恶意域名绑定(别人域名跳转到你的IP地址)
server {
listen 80;
location / {
deny all;
}
}
这样别人就会返回一个403
nginx日志功能
日志配置
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
访问日志格式为ip地址,用户,本地时间,请求,状态,大小,referer,用户浏览器
server {
listen 80;
server_name www.why.cn;
access_log logs/why_access.log;
}
error_log logs/error.log error;
日志文件
[root@why-2 ~]# cat /usr/local/nginx/logs/why_access.log
192.168.0.103 - - [06/Nov/2016:12:20:55 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0" "-"
192.168.0.103 - - [06/Nov/2016:12:21:14 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0" "-"
192.168.0.103 - - [06/Nov/2016:12:21:14 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0" "-"
192.168.0.103 - - [06/Nov/2016:12:21:15 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0" "-"
192.168.0.103 - - [06/Nov/2016:12:21:15 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0" "-"
但是按着官方文档http://nginx.org/en/docs/http/ngx_http_log_module.html的例子操作没有效果,写不进来日志。
Nginx一般日志轮询用定时器mv的方法
例如
mv log $(date +%F -d -1day).log
nginx -s reload
然后就可以根据日志进行分析或者是处理,例如写crontab 00 00 * * * 执行脚本 > /dev/null 2>&1
日志分析工具
awstat,syslog,rsyslog
常见的HTTP返回状态码
200 OK,成功返回网页 301 Move Permanently,请求永久跳转到新的位置 403 Forbidden,禁止访问 404 Not Fount,服务器拒绝请求 500 Internal Server Error,服务器内部错误 502 Bad Gateway,后端服务没有按照http协议返回,一般都是负载据均衡,反向代理的错误 503 Service Unavailable,超载或者停机维护 504 Gateway timeout网关超时
nginx类似apache服务的include方式进行配置
可以在nginx/conf目录下创建类似apache的extra目录,当然别的目录名也ok
原配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / { url跳转
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include方式配置
主配置文件
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include extra/why1.conf; #这个extra相对路径是相对nginx主配置文件而言的
}
extra/why1.conf配置
server {
listen 80;
server_name localhost;
location / { url跳转
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}