Nginx工作原理、常用命令、安装、配置

Nginx工作原理

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

Nginx的高并发得益于其采用了epoll模型,与传统的服务器程序架构不同,epoll是linux内核2.6以后才出现的。Nginx采用epoll模型,异步非阻塞,而apache采用的是select模型:
  Select特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。
  epoll的特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高。

  1. 什么是Nginx
    Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器

  2. nginx的特点和组成
    特点:Nginx特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
    组成:Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单
    核心模块:HTTP模块、EVENT模块和MAIL模块
    基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块
    第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块

  3. Nginx的优点
    1) 高并发响应性能非常好,官方Nginx处理静态文件并发5w/s
    2) 反向代理性能非常强。(可用于负载均衡)
    3) 内存和cpu占用率低。(为Apache的1/5-1/10)
    4) 对后端服务有健康检查功能。
    5) 支持PHP cgi方式和fastcgi方式。
    6) 配置代码简洁且容易上手。
    说明:处理静态文件是nginx最主要的功能

  4. Nginx安装
    1)编译环境gcc g++ 开发库之类的需要提前装好
    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
    2)首先安装PCRE pcre功能是让nginx有rewrite功能
    检查系统里是否安装了pcre软件
        rpm -qa pcre 如果没有显示说明没有安装 反之安装过
        yum install pcre-devel pcre -y 安装pcre
        rpm -e --nodeps pcre 删除pcre
    3) nginx安装 下载,解压,编译安装(安装目录为 /usr/local/nginx),检查版本,启动
       ① cd /usr/local
       ② wget http://nginx.org/download/nginx-1.16.1.tar.gz
       ③ tar -zxvf nginx-1.16.1.tar.gz
       ④ cd nginx-1.16.1
       ⑤ ./configure --prefix=/usr/local/nginx --with-http_ssl_module &&make &&make install
       ⑥ /usr/local/nginx/sbin/nginx -t

[root@bogon nginx]# sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

⑦ /usr/local/nginx/sbin/nginx 启动
⑧ 查看进程

[root@bogon nginx]# ps aux |grep nginx
root       9387  0.0  0.1  45960  1132 ?        Ss   22:19   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody     9388  0.0  0.1  46420  1900 ?        S    22:19   0:00 nginx: worker process
root       9392  0.0  0.0 112712   964 pts/0    S+   22:19   0:00 grep --color=auto nginx

⑨ 出现nginx环境页,就说明nginx启动成功

  1. Nginx常用命令
    ① 查看进程
    ps -ef|grep nginx或者ps aux |grep nginx
    ② 启动nginx
    /usr/local/nginx/sbin/nginx
    ③ 平滑启动ngin
    kill -HUP ‘cat /xx/xx/nginx.pid’ 或者 /usr/local/nginx/sbin/nginx -s reload
    ④ 完美停止nginx
    kill -QUIT ‘cat /xx/xx/nginx.pid’
    ⑤ 快速停止nginx
    kill -TERM ‘cat /xx/xx/nginx.pid’ 或者 kill -INT ‘cat /xx/xx/nginx.pid’ 或者 kill -9 nginx进程 或者 /usr/local/nginx/sbin/nginx -s stop
    ⑥ 完美停止工作进程(主要用于平滑升级)
    kill -WINCH ‘cat /xx/xx/nginx.pid’
    ⑦ 检查nginx.conf文件的修改是否正确
    /usr/local/nginx/sbin/nginx -t
    ⑧ 查看nginx的版本信息(详细信息):
    /usr/local/nginx/sbin/nginx -v(-V)

  2. 搭建Nginx负载均衡
    ① 准备两个服务 (我是一个服务,启了两个端口,一个是8082,一个是82)

Tomcat started on port(s): 8082 (http) with context path ''
2020-04-02 10:55:59.674  INFO 692 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8082
Tomcat started on port(s): 82 (http) with context path ''
2020-04-02 10:56:49.057  INFO 16288 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 82

② nginx.conf 的一些配置,可以选择自己所需的


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid文件位置
#pid        logs/nginx.pid;

#工作连接数上限
events {
    worker_connections  1024;
}

#处理http请求的一个应用配置段
http {
    include       mime.types;
    #定义的数据流
    default_type  application/octet-stream;
    #打印的日志格式    # ip 远程用户 当地时间  请求URL
    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;

    sendfile        on;
    #tcp_nopush     on;

    #超时时间
    keepalive_timeout  65;

    #代理配置 - 按需选择配置
    #缓冲区代理缓冲用户端请求的最大字节数(请求多)
    client_body_buffer_size 512k; 
    #nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_connect_timeout   5; 
    #连接成功后,后端服务器响应时间(代理接收超时)
    proxy_read_timeout      60; 
    #后端服务器数据回传时间(代理发送超时)
    proxy_send_timeout      5; 
    #设置代理服务器(nginx)保存用户头信息的缓冲区大小
    # proxy_buffer_size       16k; 
    #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
    # proxy_buffers           4 64k; 
    #高负荷下缓冲大小
    # proxy_busy_buffers_size 128k;
    #设定缓存文件夹大小,大于这个值,将从upstream服务器传
    # proxy_temp_file_write_size 128k; 

    #压缩配置 - 按需选择配置
    #NGINX可以压缩静态资源,比如我的静态资源有10M,压缩后只有2M,那么浏览器下载的就少了
    # gzip on;
    # gzip_min_length  1k;
    # gzip_buffers 4 16k;
    # gzip_http_version 1.1;
    #压缩级别大小,最小1,最大9.值越小,压缩后比例越小,CPU处理更快,1,10M压缩完后8M,但设为9,压缩完可能只有2M了。一般设置为2
    # gzip_comp_level 2; 
    #压缩类型:text,js css xml 都会被压缩
    # gzip_types text/plain application/x-javascript text/css application/xml; 
    #作用是在http响应中增加一行目的是改变反向代理服务器的缓存策略
    # gzip_vary on; 

    #动态转发 
    upstream web1 {
        #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
        #ip_hash; 
        #转发的后端的tomcat服务器,weight表示转发的权重,越大转发的次数越多,机器性能不一样配置的weight值不一样     
        server   192.168.1.130:8082 weight=1 max_fails=2 fail_timeout=30s;
        server   192.168.1.130:82 weight=1 max_fails=2 fail_timeout=30s;

    }


    server {
        #监听80端口
        listen       80;
        #域名
        server_name  www.nginx.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        #监听完成以后通过/拦截请求转发
        location / {
            #如果后端的服务器返回502504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            #获取客户端的主机名存到变量Host里面,从而取到客户端机器的信息
            proxy_set_header Host  $host; 
            #获取客户端的主机名存到变量X-Real-IP里面,从而取到客户端机器的信息
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #跳转到对应的应用web1
            proxy_pass http://web1;

            root   html;
            index  index.html index.htm;
        }

        #动态分离 ~匹配 以.*结尾(以PHP JSP结尾走这段)
        # location ~ .*\.(php|jsp|cgi|shtml)?$ {
        #     proxy_set_header Host  $host;
        #     proxy_set_header X-Real-IP $remote_addr;
        #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #     proxy_pass http://jvm_web2;
        # }

        #静态分离 ~匹配 以.*结尾(以PHP JSP结尾走这段),当然不是越久越好,如果有10000个用户在线,都保存几个月,系统托跨
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
            root /var/local/static;
            expires    30d;
        }

        #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;
        # }

    }

}

⑨ 在本机C:\Windows\System32\drivers\etc\hosts配置域名映射 192.168.216.132(我nginx所在的服务器地址)
192.168.216.132 www.nginx.com
⑩ 在浏览器地址栏输入地址www.nginx.com访问查看效果 - 截图不会显示,暂时看下结果。

@RequestMapping("/nginx")
    @ResponseBody
    public String nginx(){
        return "端口号是:" + port;
    }
		端口号是:8082
		端口号是:82

以上就是nginx的简单配置,如有不当之处,大家见谅,
参考地址:https://www.cnblogs.com/leeSmall/p/9351343.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值