最近比较系统的学习了nginx,之前虽然用了,但是都是不会就百度复制粘贴的,有些也不理解是什么鬼,能用就行了,对nginx掌握的不够彻底,系统。以下做一些nginx配置的总结,不涉及什么静态服务器配置,负载均衡,正/反代理服务器,缓存服务器。

Nginx是一个开源高性能,可靠的http中间件,代理服务器。

为什么选择nginx?

1:I/O多路复用,多个描述符的I/O操作都能在一个线程类并发交替的顺序完成,复用指的是复用同一个线程。

2:Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cacheloader)和缓存管理器进程(cachemanager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而worker、cacheloader和cachemanager均应以非特权用户身份运行:3:nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制。在nginx中,连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理,而每个worker可以并行处理数千个的并发连接及请求。


nginx配置优化:

1:worker_processes=4;

这个是用来指定nginx的worker进程个数的,一般为cpu核心数的1-2倍。

2:nginx亲核配置:不同的worker进程绑定到不同的cpu核心上,减少进程调度切换cpu的损耗

#worker_cpu_affinity 0001 0010 0100 1000;#手动分配,从右往左数1所在的位置就是所绑定的cpu

worker_cpu_affinity auto;#一般配置成auto就行了,自动分配

3:worker_rlimit_nofile 35535;

这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文

件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致

但是linux对总的文件句柄有限制,但是你也可以修改:

系统全局修改和用户局部修改

vim /etc/security/limits.conf


 Soft 和hard表示soft在超过限制时系统发提醒,但不会影响请求,hard系统会强制影响请求

两行root表示这一行配置针对root用户的,*表示全局配置。

进程局部修改就是通过:worker_rlimit_nofile来说明个数了

4:use epoll 在linux上使用epoll 的I/O 模型

5:worker_connections 20000;

每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections

6:sendfile        on;

   #tcp_nopush     on;

   tcp_nodeny     on;

   keepalive_timeout  65;

  如果作为静态资源服务器,可以把tcp_nopush打开,动态服务或者keepalive_timeout时打开tcp_nodeny

 7:gzip  on;

    gzip_disable "MSIE [1-6]\.";  

    gzip_http_version 1.1; 

    gzip_comp_level 2;

    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

    打开gzip,在低于ie7时关闭

8:expires 24h;

打开缓存

最后附上完整示例代码:

user  nginx;
worker_processes  4;
#worker_cpu_affinity 0001 0010 0100 1000;
#worker_cpu_affinity 1010101010101010 0101010101010101;
worker_cpu_affinity auto;


error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

worker_rlimit_nofile 35535;

events {
    use epoll;
    worker_connections  10240;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #######
    #Charset
    charset utf-8;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_uri"';

    access_log  /var/log/nginx/access.log  main;
    
    #######
    #Core modlue
    sendfile        on;
    #tcp_nopush     on;
    tcp_nodeny     on;
    keepalive_timeout  65;
    
    ########
    #Gzip module
    gzip  on;
    gzip_disable "MSIE [1-6]\.";  
    gzip_http_version 1.1; 
    gzip_comp_level 2;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    
    ########
    #Virtal Server
    include /etc/nginx/conf.d/*.conf;
}

 
相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!