nginx

34 阅读4分钟

nginx快速认知

nginx常用命令

linux

./nginx //启动
./nginx -s stop  //直接停止
./nginx -s quit  //优雅停止,如果还有用户在连接,则等用户不连接,再停止
./nginx -s reload  //重新加载配置
./nginx -t 查看配置是否正确

window

start nginx.exe       ## 启动服务
nginx.exe -s stop	  ## 快速停止服务
nginx.exe -s quit	  ## 优雅的 停止服务

nginx.exe -s reload	  ## 重新加载 配置文件,这命令可以不用停止nginx
nginx.exe -s reopen	  ## 重新打开日志文件

vim常用命令

vim nginx.conf  //查看文件
i //编辑文件
:wq //保存文件并退出vim
:q! //不保存文件并退出vim
:w //只保存文件,但不退出viw
:q //退出vim

查看nginx进程

ps -ef | grep nginx

image.png

配置核心进程数量

./nginx -t

image.png

image.png

修改nginx.conf

vim nginx.conf
i
:wq

重新加载nginx,并查看

../sbin/nginx -s reload
ps -ef | grep nginx

image.png

日志切割

现有的日志都会存在 access.log 文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天或者每小时对日志切割一下。

手动

1.创建一个shell可执行文件:cut_my_log.sh,

cd /usr/local/nginx/sbin
vim cut_my_log.sh

粘贴如下内容

#!/bin/bash
LOG_PATH="/var/log/nginx"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#向Nginx主进程发送信号,用于重新打开日志文件
kill -USR1 `cat $PID`

2.为cut_my_log.sh添加可执行的权限

chmod +x cut_my_log.sh
  1. 测试日志切割后的结果
./cut_my_log.sh

image.png

定时

  1. 安装定时任务
yum install crontabs
  1. 编辑并添加一行新的任务
crontab -e
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh

查看当前定时任务列表

crontab -l
  1. 重启定时任务
service crond restart

image.png

使用nginx为静态资源提供服务

静态资源

image.png

nginx

nginx.conf

http {
        include /usr/local/nginx/conf/imooc.conf;
}

imooc.conf

server{
  	listen 90;
	server_name localhost;
        
	location / {
 		root    /home/foodie-shop;
 		index    index.html;
	}
        
	location /imooc {
 		root /home;
	}
        
	location /static {
 		alias  /home/imooc;
	}

}

效果

image.png

image.png

gzip

使用gzip压缩提升请求效率

配置

http {
    # 开启gzip压缩功能,目的: 提高传输效率,节约带宽	
    gzip  on;
    # 限制最小压缩,小于1字节的文件不会压缩
    gzip_min_length 1;
    # 定义压缩的级别(压缩比,文件越大,压缩越多,但是cpu使用会越多)
    gzip_comp_level 3;
    # 定义压缩文件的类型
    gzip_types ext/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
}

配置前

image.png

image.png

配置后

image.png

image.png

localhost的匹配规则

空格 : 默认匹配、普通匹配

server{
  	listen 91;
	location / {
 		root    /home/foodie-shop;
		index index.html;
	}	
}

image.png

“=”:精确匹配(不能匹配该路径下的其他文件)

server{
  	listen 92;
	location =/study/img/face1.png {
 		root /home;
	}	
}

image.png

“~*”:匹配正则表达式,不区分大小写

server{
  	listen 93;
	location ~* .(GIF|jpg|png|jpeg)  {
 		root /home;
	}	
}

image.png

“~”:匹配正则表达式,区分大小写

server{
  	listen 94;

	location ~ .(GIF|jpg|png|jpeg)  {
 		root /home;
	}	
}

image.png

nginx进阶与实战

跨域配置

浏览器请求

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
    <script src="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios@1.6.2/dist/axios.min.js"></script>
  </head>
  <body>
    <div id="app">
      <p>{{ message }}</p>
    </div>

    <script>
      new Vue({
        el: "#app",
        data: {
          message: "Hello Vue.js!",
        },
        mounted() {
          axios
            .get("http://192.168.153.129:93/study/img/face1.png")
            .then((res) => {
              console.log("res", res);
            });
        },
      });
    </script>
  </body>
</html>

配置前

server{
  	listen 93;
	location ~* .(GIF|jpg|png|jpeg)  {
 		root /home;
	}	
}

image.png

配置后

server{
	#允许跨域请求的域,*代表所有
	add_header 'Access-Control-Allow-Origin' *;
	#允许带上cookie请求
	add_header 'Access-Control-Allow-Credentials' 'true';
	#允许请求的方法,比如 GET/POST/PUT/DELETE
	add_header 'Access-Control-Allow-Methods' *;
	#允许请求的header
	add_header 'Access-Control-Allow-Headers' *;

  	listen 93;
	location ~* .(GIF|jpg|png|jpeg)  {
 		root /home;
	}	
}

图片防盗链

配置前

image.png

只允许某站点能访问

server{
  	listen 80;
	#server_name localhost;

	#对源站点验证
	valid_referers none blocked www.imooc2.com; 
	#非法引入会进入下方判断
	if ($invalid_referer) {
	    return 404;
	} 

	location / {
 		root    /home/foodie-shop;
 		index    index.html;
	}

	location /imooc {
 		root /home;
	}

	location /static {
 		alias  /home/imooc;
	}
}

image.png

使用keepalived提高吞吐量

部署

安装jdk

虚拟机上安装centos7.x或者centos6.x,会默认帮你安装好OpenJKD

删除虚拟机自带jdk

rpm -qa | grep openjkd -i

image.png

新jdk

1.新建jkd安装目录

mkdir /usr/java

2.上传jdk到指定目录

mkdir /home/software

rz
  1. 解压jdk压缩包
tar -zxvf jdk-8u202-linux-x64.tar.gz
  1. 把解压后的jdk移到/usr/java
mv jdk1.8.0_202/ /usr/java/

5.配置环境变量 修改profile文件

vim /etc/profile

在文件最后新增如下代码块

export JAVA_HOME=/usr/java/jdk1.8.0_202
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
  1. 刷新profile,使其生效
source /etc/profile

image.png

安装tomcat

  1. 上传tomcat

image.png

  1. 解压tomcat
tar -zxvf apache-tomcat-9.0.83.tar.gz
  1. 重命名tomcat
mv apache-tomcat-9.0.83 tomcat-frontend
  1. 把tomcat移到到/usr/local
mv tomcat-frontend/ /usr/local/
  1. 进入到tomcat的bin目录执行startup.sh
cd /usr/local/tomcat-fontend/bin
./startup.sh
  1. 访问tomcat默认商品

image.png

部署另一台tomcat

  1. 上传tomcat

image.png

  1. 解压tomcat
tar -zxvf apache-tomcat-9.0.83.tar.gz
  1. 重命名tomcat
mv apache-tomcat-9.0.83 tomcat-api
  1. 把tomcat移到到/usr/local
mv tomcat-api/ /usr/local/
  1. 修改tomcat配置,解决商品冲突
cd /usr/local/tomcat-api/conf

vim server.xml

image.png

image.png

  1. 进入到tomcat的bin目录执行startup.sh
cd /usr/local/tomcat-fontend/bin
./startup.sh

image.png

windows下操作

start nginx.exe
.\nginx -s stop
.\nginx -s reload
.\nginx -t

跨域

后端9002

image.png

服务器请求

image.png

浏览器请求

image.png

配置vue.config.js解决跨域

image.png

配置nginx.conf解决跨域

image.png