一、安装nginx
- yum list | grep nginx 命令查看nginx是否存在于ECS上
- vim /etc/yum.repos.d/nginx.repo 编辑nginx的配置文件
- yum install nginx 之后就可以安装nginx了,安装完用nginx -v查看版本
二、nginx基本配置文件
- 在使用yum安装完Nginx后,需要知道系统中多了那些文件,它们都安装到了那里。可以使用下面的命令进行查看
- rpm -ql nginx
- rpm 是linux的rpm包管理工具,-q 代表询问模式,-l 代表返回列表,这样我们就可以找到nginx的所有安装位置
- nginx.conf文件
- /etc/目录
三、nginx相关命令
- 启动nginx : 在阿里云centos7.4版本以上,可以直接用nginx启动,启动成功之后,直接在浏览器用ip访问即可
- 如果浏览器页面出不来可能的原因:
- 安全组规则没有配置80端口;
- 当前云服务器防火墙处于开启状态,没有允许80端口通过
- 解决办法:
-
所以,先查看防火墙状态: 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
- 如果浏览器页面出不来可能的原因:
- nginx的停止命令
- nginx -s quit 从容停止nginx
- 或者 systemctl stop nginx.service
- 或者killall nginx
- nginx -s stop 强硬停止服务
- 另外一种启动nginx的命令:systemctl start nginx.service
- 重启nginx的命令:systemctl restart nginx.service
- ps aux | grep nginx 查看当前nginx服务状态
- 查看端口号占用情况:netstat -tlnp
- 在重新编写或者修改Nginx的配置文件后,都需要作一下重新载入,这时候可以用Nginx给的命令 :nginx -s reload ,重新载入配置文件
四、允许/禁止指定ip访问,简单访问控制
- 禁止指定ip访问
- 允许访问
- 禁止除了指定ip之外的其他ip访问
五、复杂访问权限配置
优先级、精确匹配、正则匹配
- 指令优先级
- location / 表示根目录,表示只允许231访问
- 如果把deny放到allow之前,会发现都访问不了。谁先触发,谁起作用
location / { allow 45.76.202.231; deny all; }
- 在工作中,有时候只允许访问/img,而/admin是被禁止访问的,此时,可以用精确匹配
- = 表示精确匹配,根据=后面的模式进行精确匹配
location =/img { allow all; } location =/admin { deny all; }
- 还有正则匹配可以使用
- 精确匹配有时是完不成我们的工作任务的,可以用正则匹配,以 ~ 开头
location ~\.php$ { deny all; }
五、配置虚拟主机
配置虚拟主机可以基于端口号、基于IP和基于域名,这里是基于端口号来设置虚拟主机
- 基于端口号来配置虚拟主机,原理就是Nginx监听多个端口,根据不同的端口号,来区分不同的网站
- 在/etc/nginx/conf.d/下新建自定义文件 **.conf文件,里面编写内容如下:
server{
listen 80;
server_name 112.74.164.244;
root /usr/share/nginx/html/html8001;
index index.html;
}
然后在浏览器访问ip加上端口,即可看到页面
- 基于IP和基于端口的配置几乎一样,只是把server_name选项,配置成IP就可以了
- 比如:
server{
listen 80;
server_name 112.74.164.244;
root /usr/share/nginx/html/html8001;
index index.html;
}
- 在真实的上线环境中,一个网站是需要域名和公网IP才可以访问的。我们在实际工作中配置最多的就是设置这种虚拟主机
六、反向代理
- 修改/etc/nginx/conf.d/3004.conf,修改内容举例:
- 一般我们反向代理的都是一个IP,但是我这里代理了一个域名也是可以的
server{
listen 80;
server_name nginx2.jspang.com;
location / {
proxy_pass http://jspang.com; // 一般是ip
}
}
- 其它反向代理指令
- proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。
- proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。
- proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。
- proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。
- proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh
七、Nginx适配PC或移动设备
- Nginx通过内置变量$http_user_agent,可以获取到请求客户端的userAgent,就可以用户目前处于移动端还是PC端,进而展示不同的页面给用户
- 操作步骤:
- 在/usr/share/nginx/目录下新建两个文件夹,分别为:pc和mobile目录
- 在pc和miblic目录下,新建两个index.html文件,文件里下面内容
- <h1>I am pc!</h1>
- <h1>I am mobile!</h1>
- 进入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压缩配置
- gzip是需要服务器和浏览器同事支持的。当浏览器支持gzip压缩时,会在请求消息中包含Accept-Encoding:gzip,这样Nginx就会向浏览器发送听过gzip后的内容,同时在相应信息头中加入Content-Encoding:gzip,声明这是gzip后的内容,告知浏览器要先解压后才能解析输出
- 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压缩
- 以下是gzip简单举例
http {
.....
gzip on; // 启用gzip模块
// 在客户端访问网页时,对文本、JavaScript 和CSS文件进行压缩输出
gzip_types text/plain application/javascript text/css;
.....
}