一、nginx优点
0、配置简单,更灵活。
1、高并发(静态小文件)。
2、占用资源少。2w并发 开10个线程服务,内存消耗几百兆。
3、功能种类多(web,cache,proxy),每一个功能都不是特别强。
4、支持epoll模型(apache支持select模型)。使得nginx可以支持高并发!
5、nginx配合动态服务和apache有区别。
6、利用Nginx可以对Ip限速,可以限制连接数。
二、LNMP与LAMP实现原理
三、NGINX应用场合
1、静态服务器(图片,视频服务)html,js,css,.flv等。===另一个是lighttpd,但是社区不活跃。并发1-3W
2、动态服务,nginx+fastcgi的方式运行php,jsp。动态并发:500-1500
3、反向代理,负载均衡。日pv2000w以下,都可以直接用NGINX做代理。
4、缓存服务。
四、nginx虚拟主机
一个server标签就是一个虚拟主机。
1、基于域名的虚拟主机。通过域名来区分虚拟主机 ==》应用:外部网站
2、基于端口的虚拟主机。通过端口来区分虚拟主机 ==》应用:公司内部网站,网站的后台
3、基于ip的虚拟主机。几乎不用。不支持ifconfig别名,配置文件可以。
五、nginx安装
5.1)源码下载
http://nginx.org/
5.2)安装准备,安装pcre是为了使nginx支持http rewrite模块
yum install -y pcre pcre-devel
5.3)openssl
yum install -y openssl*
5.4)开始安装,由于nginx默认会装很多核心的东西,所以编译参数很少
5.4.1)创建nginx用户
[root@server ~]# useradd nginx -M -s /sbin/nologin
tar -zxf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure --user=nginx --group=nginx --prefix=/application/nginx1.6.2 --with-http_stub_status_module --with-http_ssl_module
make && make install
echo $?
[root@server application]# ln -s nginx1.6.2/ nginx
5.4.2)检测语法并开启
[root@server sbin]# ./nginx -t
nginx: the configuration file /application/nginx1.6.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx1.6.2/conf/nginx.conf test is successful
[root@server sbin]# ./nginx
六、软件目录结构
[root@server nginx]# tree
.
├── client_body_temp
├── conf
│?? ├── fastcgi.conf 动态的配置文件,,配合php时用到
│?? ├── 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
七、默认的配置文件
[root@server conf]# cat -n nginx.conf
1
2 #user nobody;
3 worker_processes 1; //cpu是几核就可以用几个进程
4
5 #error_log logs/error.log; //错误日志,一般日志级别error,,,,可以参考官方文档
6 #error_log logs/error.log notice;
7 #error_log logs/error.log info;
8
9 #pid logs/nginx.pid;
10
11
12 events { //整个nginx连接请求的数量
13 worker_connections 1024;
14 }
15
16
17 http {
18 include mime.types;
19 default_type application/octet-stream;
20
21 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
22 # '$status $body_bytes_sent "$http_referer" '
23 # '"$http_user_agent" "$http_x_forwarded_for"';
24 上面是访问日志的格式
25 #access_log logs/access.log main; //是否记录访问日志
26
27 sendfile on;
28 #tcp_nopush on;
29
30 #keepalive_timeout 0;
31 keepalive_timeout 65;
32
33 #gzip on;
34
35 server {
36 listen 80;
37 server_name localhost;
38
39 #charset koi8-r;
40
41 #access_log logs/host.access.log main;
42
43 location / {
44 root html;
45 index index.html index.htm;
46 }
47
48 #error_page 404 /404.html;
49
50 # redirect server error pages to the static page /50x.html
51 #
52 error_page 500 502 503 504 /50x.html; //指定一个错误的访问页面
53 location = /50x.html { //如果location是50x.html页面,就去这个目录下面找
54 root html;
55 }
56
57 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
58 #
59 #location ~ \.php$ {
60 # proxy_pass http://127.0.0.1;
61 #}
62
63 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
64 #
65 #location ~ \.php$ {
66 # root html;
67 # fastcgi_pass 127.0.0.1:9000;
68 # fastcgi_index index.php;
69 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 # include fastcgi_params;
71 #}
72
73 # deny access to .htaccess files, if Apache's document root
74 # concurs with nginx's one
75 #
76 #location ~ /\.ht {
77 # deny all;
78 #}
79 }
80
81
82 # another virtual host using mix of IP-, name-, and port-based configuration
83 #
84 #server {
85 # listen 8000;
86 # listen somename:8080;
87 # server_name somename alias another.alias;
88
89 # location / {
90 # root html;
91 # index index.html index.htm;
92 # }
93 #}
94
95
96 # HTTPS server
97 #
98 #server {
99 # listen 443 ssl;
100 # server_name localhost;
101
102 # ssl_certificate cert.pem;
103 # ssl_certificate_key cert.key;
104
105 # ssl_session_cache shared:SSL:1m;
106 # ssl_session_timeout 5m;
107
108 # ssl_ciphers HIGH:!aNULL:!MD5;
109 # ssl_prefer_server_ciphers on;
110
111 # location / {
112 # root html;
113 # index index.html index.htm;
114 # }
115 #}
116
117 }
八、为了简单的完成虚拟主机改的配置文件
[root@server conf]# cat -n nginx.conf
1 worker_processes 1;
2 events {
3 worker_connections 1024;
4 }
5 http {
6 include mime.types;
7 default_type application/octet-stream;
8 sendfile on;
9 keepalive_timeout 65;
10 server {
11 listen 80;
12 server_name www.etiantian.org;
13 root html/www;
14 index index.html index.htm;
15 }
16 server {
17 listen 80;
18 server_name bbs.etiantian.org;
19 root html/bbs;
20 index index.html index.htm;
21 }
22 server {
23 listen 80;
24 server_name blog.etiantian.org;
25 root html/blog;
26 index index.html index.htm;
27 }
28
29
30 }
给目标站点创建目录,并添加响应的数据
[root@server conf]# mkdir ../html/{www,blog,bbs}
[root@server conf]# for n in www blog bbs;do echo "$n.etiantian.org" >../html/$n/index.html;done
[root@server conf]# ../sbin/nginx -t
nginx: the configuration file /application/nginx1.6.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx1.6.2/conf/nginx.conf test is successful
[root@server conf]# ../sbin/nginx -s reload
========分割点
配置虚拟主机流程:
1)复制一个完整的server标签段,到结尾,注意:要放在http的结束大括号前,也就是server标签段放入http标签。
2)更改server_name及对应网页的root根目录。
3)检查配置文件语法,平滑重启服务。
4)创建server_name对应网页的根目录,并且建立测试文件,如果没有index首页会出现403错误。
5)在客户端对server_name的主机名做host解析或dns配置,并检查(ping域名看返回的ip对不对)
6)win32浏览器访问,或者在linux客户端做host解析,用wget或curl访问。
九、配置文件的小点
9.1)配置nginx状态信息虚拟主机
[root@server conf]# vim nginx.conf
##status
server{
listen 80;
server_name status.etiantian.org;
stub_status on;
access_log off;
}
显示结果:
Active connections: 4 //nginx正处理的活动连接数4个
server accepts handled requests
13 13 84
Reading: 0 Writing: 1 Waiting: 3
第一个server表示nginx启动到现在共处理了13个连接
第二个accepts表示nginx启动到现在共成功创建了13次握手
请求丢失数=(握手数-连接数),可以看出,本次状态显示没有丢失请求。
第三个handled requests,表示总共处理了84次请求
Reading:nginx读取到客户端的header信息数。
Writing:nginx返回给客户端的header信息数。
Waiting:nginx已经处理完正在等候下一次请求指令的驻留连接,开启keep-alive的情况下,
这个值等于active-(reading+writing)
9.2)配置别名
server_name bbb.etiantian.org etiantian.org;
9.3)配置301重定向跳转
server {
listen 80;
server_name www.etiantian.org;
root html/www;
index index.html index.htm;
rewrite ^/(.*)$ http://www.etiantian.org/$1 permanent; //(.*)是域名后面的内容,$1就是(.*)所指代的内容,permanent永久重定向,,,,可以防止别人用ip来解析,
}
9.4)ip访问会访问第一个标签的内容
9.5)解决恶意域名的绑定,将第一个标签的内容改为拒绝所有
server{
listen 80;
location /{
deny all;
}
}
9.6)访问日志 http://nginx.org/en/docs/http/ngx_http_log_module.html,,可以看看后面的配置文件
9.7)日志轮询
用脚本来进行日志轮询
cd /application/nginx/logs && \
mv www_access.log www_access_$(date +%F -d -1day).log
/application/nginx/sbin/nginx -s reload
最终放到crontab中
9.8)如果是基于端口的,就只要单纯的改变listen端口,对于域名就没有什么要求,访问的时候需要加上端口号
十、给访问日志的参考
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
error_log logs/error.log error;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server{
listen 80;
location /{
deny all;
}
}
server {
listen 80;
server_name www.etiantian.org;
root html/www;
index index.html index.htm;
access_log logs/www_access.log;
}
server {
listen 80;
server_name etiantian.org;
rewrite ^/(.*)$ http://www.etiantian.org/$1 permanent;
}
server {
listen 80;
server_name bbs.etiantian.org;
root html/bbs;
index index.html index.htm;
}
server {
listen 80;
server_name blog.etiantian.org;
root html/blog;
index index.html index.htm;
}
##status
server{
listen 80;
server_name status.etiantian.org;
stub_status on;
access_log off;
}
}
十一、nginx也可以利用类似于apache的vhost的配置
主配置文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
error_log logs/error.log error;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include extra/www.conf;
include extra/bbs.conf;
include extra/blog.conf;
}
在extrax下,该目录要自己创建
[root@server extra]# cat bbs.conf
server {
listen 80;
server_name bbs.etiantian.org;
root html/bbs;
index index.html index.htm;
}