Nginx入门

柔情痞子 提交于 2019-11-27 18:09:56

Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。

优点

  • 支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。
  • 内存消耗少:在主流的服务器中Nginx目前是内存消耗最小的了,比如我们用Nginx+PHP,在3万并发链接下,开启10个Nginx进程消耗150M内存。
  • 免费使用可以商业化:Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费使用,并且可以用于商业。
  • 配置文件简单:网络和程序配置通俗易懂,即使非专业运维也能看懂。

安装

yum list | grep nginx

sudo vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

sudo yum install nginx

# 查看nginx安装版本
nginx -v

# 查看所有nginx安装文件
rpm -ql nginx

主配置文件

  • /etc/nginx/nginx.conf

  • /etc/nginx/conf.d/default.conf

启动、停止服务

启动:

  • 直接使用nginx命令启动(centos7.4版本以上)

停止:

  • nginx -s quit
  • nginx -s stop
  • killall nginx
  • 重载配置文件:

  • nginx -s reload

linux通用的服务管理:

  • systemctl [start|restart|stop] nginx.service

  • service nginx [start|restart|stop]

权限控制

#根目录
location / {
    #分号不可少!!!
    root /usr/share/nginx/html;
    index index.html indx.htm;
    #顺序不能改变,同一个块下的两个权限指令,先出现的会覆盖后出现的
    allow 192.168.158.132;
    deny all;
}

#指定目录
location = /img {
    allow all;
}

#正则表达式:~,指定.php结尾的文件
location ~ \.php$ {
    deny all;
}

虚拟主机配置

  • 在conf.d下新增**.conf配置文件,配置端口,ip或域名,根目录文件等

反向代理

正向代理:

  • 客户端请求代理服务器,再由代理服务器请求真正的服务器(客户端的代理)

反向代理:

  • 客户端请求代理服务器,由代理服务器决定最终访问哪个服务器(服务端的代理)
  • 安全、功能(负载均衡)
location / {
    proxy_pass 192.168.158.132;
    #proxy_set_header: 在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。
    #proxy_connect_timeout: 配置Nginx与后端代理服务器尝试建立连接的超时时间。
    #proxy_read_timeout: 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。
    #proxy_send_timeout: 配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。
    #proxy_redirect: 用于修改后端服务器返回的响应头中的Location和Refresh
}

适配不同屏幕

location / {
    root /usr/share/nginx/html;
    #链接到不同的程序入
    if($http_user_agent ~* 'Android|iPhone') {
        root /usr/share/nginx/mobile;
    }
    index index.html;
}

Gzip压缩配置

vi /etc/nginx/nginx.conf

http {
    #该指令用于开启或 关闭gzip模块。
    gzip on;
    #指定压缩文件类型
    gzip_types text/plain application/javascript text/css;
    #gzip_buffers : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
    #gzip_comp_level : gzip压缩比,压缩级别是1-9,1的压缩级别最低,9的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长。
    #gzip_disable : 可以通过该指令对一些特定的User-Agent不使用压缩功能。
    #gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从相应消息头的Content-length中进行获取。
    #gzip_http_version:识别HTTP协议版本,其值可以是1.1.或1.0.
    #gzip_proxied : 用于设置启用或禁用从代理服务器上收到相应内容gzip压缩。
    #gzip_vary : 用于在响应消息头中添加Vary:Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩。
}

集群Tomcat

  1. 配置多个tomcat,修改为不同端口

  2. 配置nginx,vi /etc/nginx/nginx.conf

  3. #代理服务器礼列表
    upsteam server_list {
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
    }
    
    server {
        location / {
         #配置反向代理
            proxy_pass http://server_list;
        }
    }
  4. 重启nginx,就会自动寻找服务器

session不共享问题

  • 集群session默认不会共享,服务器之间的session是相互隔离的。

  • 使用web容器本身的session共享策略解决,weblogic靠谱,tomcat存在缺陷,可以使用tomcat+redis的session共享策略实现。

  • 配置tomcat自身的session共享策略:

    1. 启用所有tomcat配置中的集群配置,修改server.xml,取消下面代码的注释
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    1. 修改项目的web.xml配置文件:添加 <distributable/>标签即可
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!