阿里云ESC服务器之nginx使用

一、安装nginx

  1. yum list | grep nginx 命令查看nginx是否存在于ECS上
  2. vim /etc/yum.repos.d/nginx.repo 编辑nginx的配置文件
  3. yum install nginx 之后就可以安装nginx了,安装完用nginx -v查看版本

二、nginx基本配置文件

  1. 在使用yum安装完Nginx后,需要知道系统中多了那些文件,它们都安装到了那里。可以使用下面的命令进行查看
    1. rpm -ql nginx
    2. rpm 是linux的rpm包管理工具,-q 代表询问模式,-l 代表返回列表,这样我们就可以找到nginx的所有安装位置
  2. nginx.conf文件
    1. /etc/目录

三、nginx相关命令

  1. 启动nginx : 在阿里云centos7.4版本以上,可以直接用nginx启动,启动成功之后,直接在浏览器用ip访问即可
    1. 如果浏览器页面出不来可能的原因:
      1. 安全组规则没有配置80端口;
      2. 当前云服务器防火墙处于开启状态,没有允许80端口通过
    2. 解决办法:
    3. 所以,先查看防火墙状态: systemctl status firewalld,如果是active,证明是启动状态
      如果防火墙没启动,就启动防火墙:systemctl start firewalld
      接着,查看所有已经启动的服务:systemctl list-unit-files|grep enabled
      查看firewalld允许通过的端口列表:firewall-cmd --zone=public --list-ports
      查看当前开了哪些端口,其实一个服务对应一个端口 firewall-cmd --list-services
      发现我只开放了3306端口,接着我开放了3002端口 :firewall-cmd --zone=public --add-port=3002/tcp --permanent
      之后需要重启防火墙:systemctl restart firewalld.service
  2. nginx的停止命令
    1. nginx -s quit 从容停止nginx
    2. 或者 systemctl stop nginx.service
    3. 或者killall nginx
    4. nginx -s stop 强硬停止服务
  3. 另外一种启动nginx的命令:systemctl start nginx.service
  4. 重启nginx的命令:systemctl restart nginx.service
  5. ps aux | grep nginx 查看当前nginx服务状态
  6. 查看端口号占用情况:netstat -tlnp
  7. 在重新编写或者修改Nginx的配置文件后,都需要作一下重新载入,这时候可以用Nginx给的命令 :nginx -s reload ,重新载入配置文件

四、允许/禁止指定ip访问,简单访问控制

  1. 禁止指定ip访问
  1. 允许访问

  1. 禁止除了指定ip之外的其他ip访问

五、复杂访问权限配置

优先级、精确匹配、正则匹配

  1. 指令优先级
    1. location / 表示根目录,表示只允许231访问
    2. 如果把deny放到allow之前,会发现都访问不了。谁先触发,谁起作用

location / { allow 45.76.202.231; deny all; }

  1. 在工作中,有时候只允许访问/img,而/admin是被禁止访问的,此时,可以用精确匹配
    1. = 表示精确匹配,根据=后面的模式进行精确匹配

location =/img { allow all; }    location =/admin { deny all; }

  1. 还有正则匹配可以使用
    1. 精确匹配有时是完不成我们的工作任务的,可以用正则匹配,以 ~ 开头

location ~\.php$ { deny all; }

五、配置虚拟主机

配置虚拟主机可以基于端口号、基于IP和基于域名,这里是基于端口号来设置虚拟主机

  1. 基于端口号来配置虚拟主机,原理就是Nginx监听多个端口,根据不同的端口号,来区分不同的网站
    1. 在/etc/nginx/conf.d/下新建自定义文件 **.conf文件,里面编写内容如下:
server{
    listen 80;
    server_name 112.74.164.244;
    root /usr/share/nginx/html/html8001;
    index index.html;
}
然后在浏览器访问ip加上端口,即可看到页面
  1. 基于IP和基于端口的配置几乎一样,只是把server_name选项,配置成IP就可以了
    1. 比如:
server{
    listen 80;
    server_name 112.74.164.244;
    root /usr/share/nginx/html/html8001;
    index index.html;
}
  1. 在真实的上线环境中,一个网站是需要域名和公网IP才可以访问的。我们在实际工作中配置最多的就是设置这种虚拟主机

六、反向代理

  1. 修改/etc/nginx/conf.d/3004.conf,修改内容举例:
    1. 一般我们反向代理的都是一个IP,但是我这里代理了一个域名也是可以的
server{
    listen 80;
    server_name nginx2.jspang.com;
    location / {
       proxy_pass http://jspang.com; // 一般是ip
    }
}
  1. 其它反向代理指令
  • proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。
  • proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。
  • proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。
  • proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。
  • proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh

七、Nginx适配PC或移动设备

  1. Nginx通过内置变量$http_user_agent,可以获取到请求客户端的userAgent,就可以用户目前处于移动端还是PC端,进而展示不同的页面给用户
  2. 操作步骤:
    1. 在/usr/share/nginx/目录下新建两个文件夹,分别为:pc和mobile目录
    2. 在pc和miblic目录下,新建两个index.html文件,文件里下面内容
      1. <h1>I am pc!</h1>
      2. <h1>I am mobile!</h1>
    3. 进入etc/nginx/conf.d目录下,修改8001.conf文件,改为下面的形式
server{
 listen 80;
 server_name nginx2.jspang.com;
 location / {
  root /usr/share/nginx/pc; // 默认情况下展示pc
  // if判断是哪个端,用正则表达式匹配,~* ,* 表示不区分大小写
  if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
     root /usr/share/nginx/mobile;
  }
  index index.html;
 }
}

八、nginx的gzip压缩配置

  1. gzip是需要服务器和浏览器同事支持的。当浏览器支持gzip压缩时,会在请求消息中包含Accept-Encoding:gzip,这样Nginx就会向浏览器发送听过gzip后的内容,同时在相应信息头中加入Content-Encoding:gzip,声明这是gzip后的内容,告知浏览器要先解压后才能解析输出
  2. Nginx提供了专门的gzip模块,并且模块中的指令非常丰富。
  • gzip : 该指令用于开启或 关闭gzip模块。
  • 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压缩
  1. 以下是gzip简单举例
http {
    .....
    gzip on;  // 启用gzip模块
    // 在客户端访问网页时,对文本、JavaScript 和CSS文件进行压缩输出
    gzip_types text/plain application/javascript text/css;
    .....
}

发布了24 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43869192/article/details/103970115
今日推荐