Nginx

Nginx简介

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。协议下发行。特点占用内存少,并发能力强,使用nginx的网站有腾讯、淘宝、百度、京东、新浪、网易等。


nginx作用

1、反向代理
正向代理,用户A不能访问谷歌,浏览器配置代理服务器,然后通过访问代理服务器,让代理服务器获取内容并返回用户A。
反向代理,用户A发送请求给反向代理服务器,反向代理转交请求,并将获得的内容返回给客户端。反向代理客户端不需要任何配置。
2、负载均衡
负载均衡,分摊到多个操作单元上进行执行。
3、动静分离
静态页面与动态页面部署到不同服务器上


检查安装与启动停止

进入/usr/local/nginx/sbin/目录

./nginx -v       // 查看版本
./nginx        // 启动
./nginx -s stop    // 停止
./nginx -s reload   // 重启


配置systemctl后的管理方式

systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl status nginx


配置systemctl

1、创建一个nginx.service并添加执行权限
  vim /usr/lib/systemd/system/nginx.service
  chmod +x /usr/lib/systemd/system/nginx.service

2、添加内容

注释不能加,要去掉,否则报错
[Unit] # 对服务的说明
Description=nginx - high performance web server # 描述服务
After=network.target remote-fs.target nss-lookup.target # 描述服务类别

[Service] # 服务的一些具体运行参数的设置
Type=forking # 后台运行的形式
PIDFile=/usr/local/nginx/logs/nginx.pid # PID文件的路径
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf # 启动准备
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 启动命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload # 重启命令
ExecStop=/usr/local/nginx/sbin/nginx -s stop # 停止命令
PrivateTmp=true # 给服务分配临时空间

[Install]
WantedBy=multi-user.target

3、重载systemctl命令

systemctl daemon-reload
systemctl start nginx.service


nginx配置文件解释

# 用户
#user  nobody;

# processes [ˈprəʊsesɪz] 进程
worker_processes  1;    # 此项配置表示可以处理的并发数量;设置值和CPU核心数一致

# 日志位置和日志级别
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024; # 支持的最大连接数,客户端到nginx的连接可以有多少个
}

Nginx原理分析

Nginx启动后有多进程,包括一个master进程,多个worker进程。
worker进程个数是根据服务器CPU核数来决定的。如4核心配置为worker_processes 4。如果设置少了,cpu的性能不能得到发挥。设置多了,频繁切换上下文带来损耗。
多个worker使用竞争机制从master获取任务。
worker_connections 1024,表示每个worcker支持的最大连接数。
因此,一个nginx能建立的最大连接数是 worker_processes * worker_connections,worker_connections默认是1024,当然,这是最大连接数。如果http请求本地资源,支持的最大并发量就是worker_processes * worker_connections;如果是http1.1,每次访问占用两个连接,支持的最大并发量就是worker_processes * worker_connections/2。如果使用反向代理,http1.1,每个请求过来,nginx服务器会与浏览器和后端服务器分别建立两个连接,支持的最大并发量就是worker_processes * worker_connections/4。

master、worker机制优点
1、可以使用 nginx -s reload热部署
master进程在接到指令后,重新加载配置文件,再启动新的worker进程,新worker开接收新请求;同时master向所有老worker进程发送信号,告诉他们,不再接收新请求,如果有未处理完的请求处理完成后再退出。
2、每个worker都是独立的进程,一个worker出现故障,其他worker继续工作,不会造成服务中断。


location 规则说明

location  /  {
  proxy_pass http://192.168.0.105:9003;
}

location用于匹配url,语法如下:

location [ = | ~ | ~* | ^~ ]  url {

}

~  正则匹配,区分大小写
~*  正则匹配,不区分大小写
=  不使用正则匹配,字符中必须是严格的url


反向代理 

示例一,反向代理单机服务器:

server {
      # listen和servr_name配置的是nginx对外暴露的ip和端口号
     # server_name的配置不可以加http://前缀,否则启动报错
        listen       80;
        server_name  192.168.0.105;

        # 下面是转发给tomcat的ip和端口号
        # proxy_pass的配置可以加http:前缀,末尾不要忘了冒号
        location / {
            proxy_pass http://192.168.0.105:9003;
        }
}

示例二,反向代理多台服务器:

有两台tomcat,一台tomcat的webapps里有项目first,first目录下有WEB-INF、index.jsp等;另一台tomcat的webapps里有项目second,second目录下也有WEB-INF、index.jsp等;

server {
        listen       80;
        server_name  192.168.0.105;

        location ~ /first/ {
            proxy_pass http://192.168.0.105:9000;
        }

        location ~ /second/ {
            proxy_pass http://192.168.0.105:9001;
        }
}

浏览器访问:192.168.0.105/first  192.168.0.105/second  


负载均衡默认轮询

upstream myserver {
    server 192.168.0.105:9000;
    server 192.168.0.105:9001;
    server 192.168.0.105:9003;
}

server {
    listen       80;
    server_name  192.168.0.105;

    location / {
        proxy_pass http://myserver;
        root   html;
        index  index.html index.htm;
    }
} 

负载均衡策略

轮询,每个请求按照时间顺序分配到不同的服务器,如果后端服务器down掉,就自动剔除了。
权重,用于性能不均,哪个服务器分配的多些,weight=3
ip绑定,每个请求按照ip的hash结果分配,一个访客一个固定后端服务器,解决session缓存的问题


动静分离

通过设置 expires 参数,可以使浏览器在过期时间内缓存页面,浏览器发送请求,服务器对比该文件最后更新时间,文件没有更新,返回给浏览器304,浏览器从缓存里返回用户;有改变,服务器返回内容。

经常更新的页面不建议使用;

   server {
        listen       80;
        server_name  192.168.0.105;

        location /images/ {
            autoindex on;
            root /data/;
        }

        location /www/ {
            root /data/;
        }
    }

文件服务器目录:
/data/images/1.jpg
/data/www/1.txt

浏览器访问:http://192.168.0.105/images/1.jpg  http://192.168.0.105/www/1.txt

 

posted @ 2020-05-29 00:56  zhuangrunwei  阅读(135)  评论(0编辑  收藏  举报