从零开始学-nginx

原创 2018年04月15日 21:21:03

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

简介

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

rocketmq学习笔记 二 官方实例<分布式事务>

rocketmq实现分布式事务,是指消息是有状态的 A调用B,A先broker发了一条消息, A本地开启事务,执行完本地方法,先broker发送确认消息。 B从broker中订阅消息,来执行消息。...
  • akfly
  • akfly
  • 2016-12-08 22:15:39
  • 4150

rocketmq学习笔记 二 官方实例<消息顺序>

所谓消息顺序,是指在一些业务场景下, 消息是有先后顺序的 在rocketmq中, 如何保持消息顺序? 把所要保持顺序的消息,放到同一个消息队列即可。实现MessageQueueSelector接口...
  • akfly
  • akfly
  • 2016-12-08 22:15:19
  • 2935

从零开始学习nginx

首先搭建环境:安装ubuntu,然后安装vmware tools,安装vmware tools的时候要先在虚拟机某个地方新建一个目录,然后把所以tools的文件复制过去,然后解压安装。直接解压会提示r...
  • THEANARKH
  • THEANARKH
  • 2016-06-25 17:05:18
  • 531

CentOS+Nginx+Tomcat集群及负载均衡

前两天申请了一台免费腾讯云服务器,只有5天时间,不知道该怎么用呢,后来想到自己用来学习搭建一个nginx+tomcat集群测试吧,正好自己也有一个域名,就绑定到这台云服务器上的IP地址。好了,言归正传...
  • yanshichuan1
  • yanshichuan1
  • 2016-12-10 17:07:48
  • 146

tkprof查看trace文件

对特定的操作,开启trace文件跟踪 开启会话级 (针对特定操作,尽量用此级别) SQL&amp;gt; alter session set sql_trace=true; SQL&amp;gt...
  • louisjh
  • louisjh
  • 2018-03-07 09:16:37
  • 21

Spring Cloud Sleuth进阶实战

为什么需要Spring Cloud Sleuth?微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去...
  • forezp
  • forezp
  • 2017-08-06 22:37:05
  • 48582

MySQL 5.6 从零开始学 读后总结和感

写在最前面: 此书包含,但是不限于下面的内容。以上只是写了一部份内容,还有,日志,试图,备份还原等内容没有写出。《MySQL 5.6从零开始学(视频教学版)》以MySQL5.6为线索,全面讲...
  • liuguangqiang
  • liuguangqiang
  • 2016-07-29 22:31:13
  • 4843

MYSQL 5.5从零开始学pdf高清文件以及配套光盘

  • 2017年10月13日 15:17
  • 48B
  • 下载

Spring-Boot (二) application.properties配置文件内容

Spring-Boot官方开发指导文档 默认创建spring-boot项目后,会在resources目录下生成一个空的application.properties配置文件,springboot启动时...
  • fly_leopard
  • fly_leopard
  • 2017-11-10 14:46:38
  • 1775

HTTP cookie

原文地址:https://en.wikipedia.org/wiki/HTTP_cookie   HTTP cookie From Wikipedia, the free encyclope...
  • zahuopuboss
  • zahuopuboss
  • 2013-03-05 22:21:03
  • 1971
收藏助手
不良信息举报
您举报文章:从零开始学-nginx
举报原因:
原因补充:

(最多只允许输入30个字)