nginx

Posted 一把纯钧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx相关的知识,希望对你有一定的参考价值。

一、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;
    }

 

以上是关于nginx的主要内容,如果未能解决你的问题,请参考以下文章

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段

linux学习:Nginx--常见功能配置片段与优化-06

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒

Nginx 跨域

Nginx配置文件详细介绍