从零开始学-nginx

以下是我个人见解, 不喜勿喷, 如有错误, 还望各路大神多多指教

简介

Nginx 是一个高性能的 HTTP 和 反向代理服务器.
主要特点:
1. 占用内存比较少
2. 并发能力强
3. 处理静态页面性能非常强

Nginx由内核跟模块组成

Nginx相比Apache
1. 高并发响应性能非常好,官方Nginx处理静态文件并发5w/s
2. 反向代理性能强
3. 内存和cpu占用率低(为Apache 的 1/5 ~ 1/10)
4. 对后端服务由健康检查功能
5. 支持PHP cgi方式和 fastcgi方式
6. 配置代码简洁而且容易上手


工作原理及安装配置

安装配置
Nginx启动:由主进程和工作进程组成

常用命令
这些命令在Nginx目录的/sbin/下执行

./nginx                 启动
./nginx -s reload       重新加载配置
./nginx -s reopen       重启
./nginx -s stop
ps -ef | grep nginx     查看nginx进程
./nginx -v              查看版本
./nginx -V              查看版本和详细参数

Nginx升级

借鉴博客
Nginx平滑升级
nginx启动、重启、重新加载配置文件和平滑升级
将nginx1.10.3升级成1.12.2

查看nginx进程
ps -ef | grep nginx     
查看nginx参数
./nginx/sbin/nginx -V   
解压新版本,进入目录,复制当前版本参数, 上面查看到的 configure arguments:
./nginx-1.12.2/configure --prefix=/home/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/home/pcre-8.32
编译不安装,以免覆盖旧的文件
make                    
备份
cp /home/nginx/sbin/nginx /home/nginx/sbin/nginx1.10.old    
将新版本nginx-1.12.2/objs/nginx 复制到旧版本的sbin下
cp ./objs/nginx /home/nginx/sbin/nginx

查看旧版本pid
cat /home/nginx/logs/nginx.pid
或者
ps -ef | grep nginx(这里是603)
xxx     603     1  0 16:05 ?        00:00:00 nginx: master process ./nginx
nginx会将logs/nginx.pid文件重命名为nginx.pid.oldbin,然后用新的可执行文件启动一个新的nginx主进程和对应的工作进程,并新建一个新的nginx.pid保存新的主进程号,这时,nginx的新的实例和旧的实例同时工作,共同处理请求连接.
kill -usr2 603
给旧的主进程发送WINCH信号,kill -WINCH 旧的主进程号
旧的主进程号收到WINCH信号后,将旧进程号管理的旧的工作进程优雅的关闭.
即一段时间后旧的工作进程全部关闭,只有新的工作进程在处理请求连接.
这时,依然可以恢复到旧的进程服务,因为旧的进程的监听socket还未停止
kill -winch 603
给旧的主进程发送QUIT信号,使其关闭
给旧的主进程发送QUIT信号后,旧的主进程退出,并移除logs/nginx.pid.oldbin文件,nginx的升级完成
kill -quit 603

Ngixn配置


#user  nobody;                          定义Nginx运行的用户和用户组
worker_processes  8;                    启动的进程数
#以下参数指定了哪个cpu分配给哪个进程,一般来说不用特殊指定。
#如果一定要设的话,用0和1指定分配方式.
#这样设就是给1-4个进程分配单独的核来运行,出现第5个进程是就是随机分配了。
#优化让cpu处理更加均匀,更强
#worker_cpu_affinity 00000001 00000010 00000100 00001000 
#                    00010000 00100000 01000000 10000000

#一个nginx进程打开的最多文件描述符数目
理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除
但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致
#vim /etc/security/limits.conf
#  *                soft    nproc          65535
#  *                hard    nproc          65535
#  *                soft    nofile         65535
#  *                hard    nofile         65535
#worker_rlimit_nofile 65535;

#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定进程id存储位置
#pid        logs/nginx.pid;


events {
    #use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 
    #epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型.
    use epoll;

    #注意:最大客户数也由系统的可用socket连接数限制(~ 64K)所以设置不切实际的高没什么好处
    worker_connections  65535;

    #每个进程可以处理的最大连接数,理论上每台nginx服务器的最大连接数为
    #worker_processes*worker_connections。
    #理论值:worker_rlimit_nofile/worker_processes    worker_connections  1024;

    #worker工作方式:串行(一定程度降低负载,但服务器吞吐量大时,关闭使用并行方式)默认off
    #multi_accept on; 
}


http {
    #设置mime类型,mime类型由mime.types文件定义
    include       mime.types;              
    default_type  application/octet-stream;

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

    #access_log  logs/access.log  main;

    #默认编码
    #charset utf-8;

    #开启目录列表访问,使用于下载服务器,默认关闭.
    #类似镜像站如:阿里云仓库 http://maven.aliyun.com/nexus/content/groups/public/
    #autoindex on

    #是否调用sendfile(zero copy方式)输出文件
    #普通应用必须设置为on
    #如果做为下载应用,可以设置为off,平衡磁盘与网络的I/O处理,降低系统的uptime
    sendfile        on;
    #响应客户端超时时间
    send_timeout 10;



    #防止网络阻塞
    #tcp_nopush     on;
    #提高数据的实时响应性
    #tcp_nodelay on;

    #服务器名字的hash表大小
    server_names_hash_bucket_size 128;
    #超时时间,客户端与服务端的持续连接时间
    #keepalive_timeout  0;
    keepalive_timeout  65;


    #指定客户端请求中较大的消息头的缓存最大数量和大小。
    large_client_header_buffers 4 64k;


    #客户端请求单个文件的最大字节数
    client_max_body_size 8m;
    #缓冲区代理缓冲用户端请求的最大字节数
    client_body_buffer_size 128k;
    #客户端请求头读取超时时间
    client_header_timeout 10;
    #设置客户端请求主体读取超时时间
    client_body_timeout 10;

    #nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_connect_timeout 90;
    #发送超时,后端服务器数据回传时间
    proxy_send_timeout 90;
    #接受超时,连接成功后服务器端响应的时间
    proxy_read_timeout 90;
    #设置代理服务器保存用户的信息缓冲区大小
    proxy_buffer_size 4k;
    #缓冲区,网页平均大小在32k的情况下,可以这样设置
    proxy_buffers 4 32k;
    #高负荷下缓冲大小,proxy_buffers*2
    proxy_buay_buffers_size 64k;


    #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
    #fastcgi_connect_timeout 300;
    #fastcgi_send_timeout 300;
    #fastcgi_read_timeout 300;
    #fastcgi_buffer_size 64k;
    #fastcgi_buffers 4 64k;
    #fastcgi_busy_buffers_size 128k;
    #fastcgi_temp_file_write_size 128k;

    #gzip模块设置
    #开启gzip压缩
    #gzip  on     
    #最小压缩文件大小           
    #gzip_min_length 1k;    
    #压缩缓冲区
    #gzip_buffers    4 16k  
    #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    #gzip_http_version 1.1; 
    #压缩等级 1-9 等级越高,压缩效果越好,节约宽带,但CPU消耗大
    #如:一个100k的文件压缩:级别2压缩后 80k,级别9压缩后 10k
    #gzip_comp_level 2;
    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn
    #gzip_type text/plain text/css application/x-javascript application/xml;
    #前端缓存服务器缓存经过压缩的页面
    #gzip_vary on;

    #引入配置文件如,自定义虚拟主机
    include vhost.conf


    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }


        location / {
            #限制IP访问
            deny 192.168.0.2;
            allow 192.168.0.0/24;
            allow 192.168.1.1;
            deny all;
        }

        #静态文件直接从目中读取
        location ~.*\.(html|htm|gif|jpg|jpeg|bmp|pgn|ico|txt|js|css) {
            root /static;
            #定义用户浏览器缓存时间
            expires 3d;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

博客借鉴
Nginx简介及配置文件详解

以后慢慢写
..

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Me_ZH/article/details/79953468
个人分类: 从零开始学习
上一篇从零开始学-mysql
下一篇安装Nginx
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭