前言

什么是Nginx

Nginx是一个高性能的HTTP和反向代理Web服务器,同时也提供IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3/SMTP)代理服务器。

Nginx的特点是:占有内存少,并发能力强。

Nginx专门为性能优化而开发,性能是最重要的考量,非常注重效率,事实上Nginx的并发能力在同类型的网页服务器种表现较好,能够支持高达50000个并发连接响应数。

安装Nginx

1.在官网下载Nginx

官方网站:https://nginx.org/en/download.html

2.启动Nginx

解压下载好的Nginx,在根目录双击 nginx.exe 文件

在根目录打开CMD,使用以下命令打开Nginx

启动服务:start nginx 退出服务:nginx -s quit 强制关闭服务:nginx -s stop 重载服务:nginx -s reload  (重载服务配置文件,类似于重启,服务不会中止) 验证配置文件:nginx -t 使用配置文件:nginx -c "配置文件路径" 使用帮助:nginx -h

正文开始

worker_processes 1;
events {
  worker_connections 1024;
}
http {
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;
  server {}
}

演示如何强制http跳转https

server {
    listen 80;
    server_name test.com;
    # http强制跳转到https
    rewrite ^(.*)$ https://$server_name$1 permanent;
}

演示如何配置微信支付的校验文件

server {
    listen 80;
    server_name localhost;
    # 默认根路径
    location / {
      root index.html;
      index  index.html index.htm;
      try_files $uri $uri/ /index.html;
    }
    # 微信支付校验文件,可以直接配置访问名称
    location ^~/MP_verify_2g3uEjrB5B2LIbNl.txt {
      alias /home/MP_verify_2g3uEjrB5B2LIbNl.txt;
    }
    # 微信支付校验文件,也可以通过正则配置
    location ~^/MP_verify_[a-zA-Z0-9]*.(txt)$ {
      root /home/;
      rewrite ^/home/(.txt)$ /home/$1 last;
    }
}

演示root和alias两种配置静态资源的区别

server {
    listen 80;
    server_name localhost;
    # 用root方式,location中的路径会拼加到root的地址后面
    # 请求路径为:http://localhost:8080/files/index.jpg    实际访问为:/home/files/index.jpg
    location ~^/files/ {
        root /home/;
        index index.html index.htm;
    }
    # 用alias方式,location中的路径不会拼加到alias的地址后面
    # 这请求路径为:http://localhost:8080/files/index.jpg    实际访问为:/home/index.jpg
    location ~^/files/ {
        alias /home/;
        index index.html index.htm;
    }
}

演示请求后台接口代理配置

server {
    listen 8080;
    server_name localhost;
    #################### 第一种场景(代理地址不加斜杠) ####################
    # 请求路径为:http://127.0.0.1:8080/api/getUser   实际代理为:http://127.0.0.1:8000/api/getUser
    location ^~/api/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
        proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
    }
    # 请求路径为:http://127.0.0.1:8080/api/getUser   实际指向为:http://127.0.0.1:8000/api/getUser
    location ^~/api {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
        proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
    }
​
    #################### 第二种场景(代理地址+斜杠) ####################
    # 请求路径为:http://127.0.0.1:8080/api/getUser   实际代理为:http://127.0.0.1:8000/getUser
    location ^~/api/ {
        proxy_pass http://127.0.0.1:8000/;
        proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
        proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
    }
    # 请求路径为:http://127.0.0.1:8080/api/getUser   实际代理为:http://127.0.0.1:8000//getUser
    location ^~/api {
        proxy_pass http://127.0.0.1:8000/;
        proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
        proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
    }
​
    #################### 第三种场景(代理地址+后缀) ####################
    # 请求路径为:http://127.0.0.1:8080/api/getUser   实际代理为:http://127.0.0.1:8000/user/getUser
        location ^~/api {
        proxy_pass http://127.0.0.1:8000/user;
        proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
        proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
    }
    # 请求路径为:http://127.0.0.1:8080/api/getUser   实际代理为:http://127.0.0.1:8000/usergetUser
    location ^~/api/ {
        proxy_pass http://127.0.0.1:8000/user;
        proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
        proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
    }

    #################### 第四种场景(代理地址+后缀+斜杠) ####################
    # 请求路径为:http://127.0.0.1:8080/api/getUser   实际代理为:http://127.0.0.1:8000/user/getUser
    location ^~/api/ {
        proxy_pass http://127.0.0.1:8000/user/;
        proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
        proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
    }
    # 请求路径为:http://127.0.0.1:8080/api/getUser   实际代理为:http://127.0.0.1:8000/user//getUser
    location ^~/api {
        proxy_pass http://127.0.0.1:8000/user/;
        proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
        proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
    }
}

演示前端项目如何部署nginx

server {
   listen 8090;
   server_name localhost;
    # 默认访问
    # 部署路径:/home/web/my_demo
    # 访问路径为:http://localhost:8090/
    location / {
        try_files $uri $uri/ /index.html;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        root /home/web/my_demo/;
        index index.html index.htm;
    }
    
    # 带前缀的访问
    # 部署路径:/home/web/my_demo
    # 访问路径为:http://localhost:8090/my_demo/
    # 如果location路径最后没有配置斜杠,则浏览器输入访问地址后,路径最后会自动拼一个斜杠
    location ^~/my_demo/ {
        try_files $uri $uri/ /my_demo/index.html;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        root /home/web/;
        index index.html index.htm;
    }
}