Nginx 学习笔记

111 阅读2分钟

nginx 服务器配置

前置工作

安装必要程序

yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim

配置 yum 源

vim /etc/yum.repos.d/nginx.repo

# 将以下内容添加进去
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/  #OS和OSRELEASE 根据自己的系统和版本号填写 如 /centos/7
gpgcheck=0
enabled=1

# 开始安装
yum install nginx

# 检查是否安装成功
nginx -v

查看 nginx 安装目录

rpm -ql nginx

查看 nginx 的总配置文件

vim /etc/nginx/nginx.conf

nginx 服务的启动与停止

  • 启动方式
    • nginx 直接启动
    • systemctl start nginx.service
  • 查看是否启动
    • ps aux | grep nginx
  • 停止方式
    • nginx -s stop 立即停止
    • nginx -s quit 从容停止
    • killall nginx 直接杀死
    • systemctl stop nginx.service
  • 重启服务
    • systemctl restart nginx.service
  • 重新载入配置文件
    • nginx -s reload
  • 查看端口号占用情况
    • netstat -tlnp

nginx 的配置文件

配置入口

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

配置跨域支持

vim /etc/nginx/nginx.conf

# 加入以下代码
http {
  add_header Access-Control-Allow-Origin *;
  add_header Access-Control-Allow-Headers X-Requested-With;
  add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
  ...
}

配置协商缓存

  • etag on; //开启 etag 验证
  • expires 7d; //设置缓存过期时间为 7 天

在服务器上开启 Gzip 传输压缩

  • gzip on;
  • gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;

访问权限的控制

location / {
  allow 12.34.567.890;
  deny all;
}

上述配置表示只允许 IP 为12.34.567.890 的主机进行访问。

location = /admin {
  deny all;
}

= 根据其模式后进行精确匹配 ~ 后面跟正则匹配符(~指区分大小写的正则匹配,~*指不区分大小写的正则匹配) @ 内部访问符,一般用于错误页面

location ~ \.php$ {
  deny all;
}

禁止访问所有 php 页面

基于端口号配置虚拟主机

原理

nginx 监听多个端口,根据不同的端口号,来区分不同的网站。

配置地方

  • 可以在主配置文件 /etc/nginx/nginx.conf
  • 也可以在 /etc/nginx/conf.d/default.conf
  • 还可以在  conf.d 文件夹下新建一个配置文件
# 新建一个 server,监听8081,此时有两个
server {
  listen  8081;
  server_name  localhost;
  root  /usr/share/nginx/html/html8081;
  index index.html;
}

此时在浏览器访问 80 和 8081 端口,看到结果不同。

基于 IP 配置虚拟主机

与上面类似,这次改 IP;

server {
  listen 80;
  server_name 94.191.37.216;
  root /usr/share/nginx/html/html8001;
  index index.html;
}

配置以域名为划分的虚拟主机(主要更改 server_name)

  • default.conf
server {
  listen   80;
  server_name   silence-jk.club;
  ...
}
  • com.conf
server {
  listen   80;
  server_name   silence-jk.com;
  location / {
    root /usr/share/nginx/html/dist;
    index index.html index.htm;
  }
}

正向代理与反向代理

  • 正向代理:给客户端做代理,访问客户端不能访问的页面
  • 反向代理:给服务端做代理,收到客户请求后给客户端返回服务端设置好的内容(服务端想给客户端返回的)

反向代理演示

  • 修改配置文件
server {
  listen 80;
  server_name silence-jk.club;
  location / {
    proxy_pass http://silence-jk.com; # 反向代理 
  }
}

其他反向代理指令

proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。
proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。
proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。
proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。
proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh。

nginx 适配 PC 或移动设备

内置变量 $http_user_agent

可获取客户端 userAgent 来判断是 PC 还是移动端

操作步骤

  • 进入 /usr/share/nginx/
  • 创建 pc 和 mobile 两个文件夹用来存放 pc 和 移动端页面
  • 进入 /etc/nginx/conf.d/default.conf 添加以下内容
server{
  ...
  
  location / {
    root /usr/share/nginx/pc;
    if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
      root /usr/share/nginx/mobile;
    }
    index index.html;
  }
}

参考资料

一个前端必会的 Nginx免费教程