美文网首页
[运维] 服务器配置 (CentOS 7)

[运维] 服务器配置 (CentOS 7)

作者: 巨馍蘸酱 | 来源:发表于2022-11-22 17:17 被阅读0次

服务器配置

重启 Linux 服务器 reboot

安装方式 (学习对比)

  • OpenJDK 使用 yum 安装
  • Oracle JDK 使用 rpm 安装
  • tomcat tar 解压
  • mysql tar 解压
  • nginx tar 解压

自动启动 (学习对比)

  • tomcat 在 /etc/systemd/system 下创建 mysql.service, 作为服务, 使用 systemd 自启动
  • mysql 编辑 /etc/rc.d/rc.local
  • nginx 编辑 /etc/rc.d/rc.local

常用的启动关闭

  • tomcat systemctl status tomcat8 / systemctl start tomcat8 / systemctl stop tomcat8
  • mysql ps -ef | grep mysql / /usr/local/mysql-8.0.31/bin/mysqld_safe --defaults-file=/usr/local/mysql-8.0.31/my.cnf &
  • nginx ps -ef | grep nginx / /usr/local/nginx/sbin/nginx / /usr/local/nginx/sbin/nginx -s stop

ps -ef | grep 进程名称

  • ps 查看服务器的进程信息
  • e 等价于 A, 列出全部的进程
  • f 显示全部的列 (全字段) (uid 用户id, pid 进程id, ppid 父级进程id, c cpu的占用率, stime 进程启动时间, tty 终端设备, time 进程执行时间, cmd 进程的名称或对应的路径)
  • | 管道命令, 是指ps命令与grep同时执行
  • grep 全称是Global Regular Expression Print,文本搜索工具, 能使用正则表达式搜索文本

  • command1 ; command2; 隔开每个命令, 按照从左到右依次执行, 忽略是否失败, 所有命令都会执行
  • command1 | command2 管道符 | 将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入. 连续使用管道意味着 第一个命令的输出 会作为 第二个命令的输入, 第二个命令的输出又会作为 第三个命令的输入 依此类推
  • command1 & 放在启动参数后面 & 表示设置此进程为后台进程
  • command1 && command2 [&& command3 ...] 使用 && 连接, 实现逻辑与的功能. && 前面的命令返回真 (命令返回值 $? == 0), 后面的命令才会被执行
  • command1 || command2 [|| command3 ...] 使用 || 连接, 实现逻辑或的功能. 只要||前面有一个命令返回真 (命令返回值 $? == 0), 后面的命令就不会被执行

RPM / YUM[1]

RPM,全称为RPM Package Manager,是由Red Hat推出的软件包管理系统,现在在各种发行版中普遍使用。RPM仅适用于安装用RPM来打包的软件,目前是GNU/Linux下软件包资源最丰富的软件包类型。

Yum (Yellow dog Updater, Modified) 是一个基于 RPM 包管理的字符前端软件包管理器,能够从指定的服务器自动下载 RPM 包并且安装,可以自动解决处理包依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装,更方便的添加/删除/更新RPM包,便于管理系统的更新问题。被Yellow Dog Linux本身,以及Fedora、Red Hat Enterprise Linux采用。

RPM

  • -i 表示安装。
  • -v, -vv, -vvv 表示详细信息。
  • -h 以"#"号显示安装进度。
  • -q 查询指定包名。
  • -e 卸载指定包名。
  • -U 升级软件,若未软件尚未安装,则安装软件。
  • -F 升级软件。
  • -V 对RPM包进行验证。
  • –nodeps 忽略依赖关系。
  • –query 查询指定包名。同-q选项。
  • –hash 同-h。
  • –install 表示安装,同-i选项。
  • –test 仅作测试,不真正执行,可用于测试安装,测试卸载。
  • –replacepkgs 重新安装。替换原有的安装。
  • –force 忽略软件包及文件的冲突。
  • –initdb 新建RPM的数据库。
  • –rebuilddb 重建RPM的数据库。
  • –percent 以百分比的形式输出安装的进度。
  • rpm -q 查询某一个RPM包是否已安装
  • rpm -qi 查询某一个RPM包的详细信息
  • rpm -ql 列出某RPM包中所包含的文件
  • rpm -qf 查询某文件是哪个RPM包生成的
  • rpm -qa 列出当前系统所有已安装的包

YUM

  • yum list installed 显示已安装的包
  • yum list available 显示没有安装, 但可安装的包
  • yum list updates 查看所有可更新的包
  • yum list obsoletes 显示被废弃的包
  • yum search 查询名 模糊匹配搜索
  • yum install rpm包路径 安装本地rpm包
  • yum reinstall 包 安装本地rpm包
  • yum update -y 包/rpm包路径 升级软件包 (y 自动 yes)
  • yum remove 包 卸载软件包

tar

tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。

格式

  • .tar 默认模式,不压缩,只是将所有文件放到一个包里。
  • .tar.gz 常用模式,采用gzip算法压缩。压缩率一般,压缩时间中等。
  • .tar.bz2 不常用。采用bz2算法压缩。压缩率稍差,压缩时间较短。
  • .tar.xz 不常用,采用xz算法压缩。压缩率较好,压缩时间较长。

参数

  • -f<备份文件>或--file=<备份文件> 指定备份文件。
  • -v或--verbose 显示指令执行过程。
  • -x或--extract或--get 从备份文件中还原文件。
  • -z或--gzip或--ungzip 通过gzip指令处理备份文件。
  • -j 通过bzip2命令压缩或解压

解压

  • .tar.gz 后缀 tar -zxvf 文件名
  • .tar.xz 后缀 tar -Jxvf 文件名

配置文件

  • /etc/profile 全局所有用户有效
  • ~/.bash_profile 当前用户有效

JDK

  • 检查系统环境 uname -a
  • 查看系统是否自带 jdk yum list installed | grep java 或者 rpm -qa | grep java
  • 卸载所有java-11-openjdk yum -y remove java-11-openjdk* 或者 rpm -qa | grep java | xargs rpm -e --nodeps

OpenJDK (yum 安装)

  • 查看JDK软件包列表 yum search java | grep jdk
  • 安装 OpenJDK yum install -y java-1.8.0-openjdk* (使用yum安装后的jdk默认安装路径为 /usr/lib/jvm)

Oracle JDK (rpm 安装)

  • 上传 Oracle JDK 到服务器
    • scp jdk-8u351-linux-x64.rpm root@192.168.1.1:/root
    • scp -i remote.pem jdk-8u351-linux-x64.rpm root@192.168.1.1:/root
  • 使用rpm包安装 rpm -ivh jdk-8u351-linux-x64.rpm
    • -i 安装(install)
    • -v 显示更详细的信息(verbose)
    • -h 打印 #,显示安装进度(hash)
  • 检查jdk是否安装成功 java --version 或者 rpm -qa | grep jdk

java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)

  • 可执行程序放到那里去了 which java (/usr/bin/java)
  • 配置 JDK, 编辑 profile 文件 vim /etc/profile (如果存在多个 jdk/tomcat, 可以单独配置在 tomcat/starup.sh 中)
# java environment
export JAVA_HOME=/usr/java/jdk1.8.0_351
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
  • 使配置文件生效 source /etc/profile

Tomcat (tar.gz 直接解压)

  • 获取 tomcat.tar.gz 压缩包
    • 上传 Tomcat 到服务器 scp apache-tomcat-8.5.83.tar.gz root@192.168.1.1:/root
    • 在服务器使用 wget 直接下载 wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.83/bin/apache-tomcat-8.5.83.tar.gz
  • 创建tomcat目录 sudo mkdir /usr/tomcat
  • 解压到指定目录 sudo tar -zvxf apache-tomcat-8.5.83.tar.gz -C /usr/tomcat
  • 删除目录或文件 rm -rf apache-tomcat-8.5.83 (r递归删除, f无需确认直接删除)
  • 改名目录名为tomcat8 mv /usr/tomcat/apache-tomcat-8.5.83 /usr/tomcat/tomcat8.5
  • 配置 JDK (可选)
    • vim /usr/tomcat/tomcat8.5/bin/catalina.sh 添加 export JAVA_HOME=/usr/java/jdk1.8.0_351
    • vim /usr/tomcat/tomcat8.5/bin/setclasspath.sh 添加 export JAVA_HOME=/usr/java/jdk1.8.0_351
  • 修改 tomcat 端口 vim /usr/tomcat/tomcat8.5/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  • 防火墙配置端口 firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload
  • 重新加载防火墙规则 firewall-cmd --reload
  • 启动 tomcat cd /usr/tomcat/tomcat8.5/bin && sh startup.sh

配置开机启动

  • 创建Tomcat8服务文件 vim /usr/lib/systemd/system/tomcat8.service
#tomcat8.service文件内容
[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking #后台运行的形式

ExecStart=/usr/tomcat/tomcat8.5/bin/startup.sh
ExecReload=/usr/tomcat/tomcat8.5/bin/startup.sh
ExecStop=/usr/tomcat/tomcat8.5/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
  • 重新加载 systemctl daemon-reload
  • 设置Tomcat8开机启动 systemctl enable tomcat8
  • 查看是否开机自启 systemctl list-unit-files | grep tomcat8
  • 启动/关闭 tomcat8服务 systemctl start tomcat8 / systemctl stop tomcat8
  • tomcat8 状态 systemctl status tomcat8

防火墙 (systemctl)

CentOS 7 默认使用的是 firewall 作为防火墙, 使用 systemctl 来管理服务和程序, 融合之前 service 和 chkconfig 的功能

systemctl

  • 查看防火墙是否开机自启 systemctl is-enabled firewalld.service; echo $? / systemctl list-unit-files | grep firewalld
  • 禁止开机启动 systemctl disable firewalld.service
  • 开机启动 systemctl enable firewalld.service
  • 开机启动列表 systemctl list-unit-files | grep enabled
  • 关闭防火墙 systemctl stop firewalld.service
  • 开启防火墙 systemctl start firewalld.service
  • 重启防火墙 systemctl restart firewalld.service
  • 查看防火墙状态
    • systemctl status firewalld.service
    • firewall-cmd --state

防火墙 (firewall-cmd)

  • 查看开放的端口 firewall-cmd --list-all / firewall-cmd --list-ports / firewall-cmd --zone=public --list-ports
  • 端口是否开放 firewall-cmd --query-port=8080/tcp
  • 开放端口 firewall-cmd --permanent --zone=public --add-port=8080/tcp (permanent永久生效)
  • 开放端口 firewall-cmd --permanent --zone=public --add-service=http (80端口)
  • 开放端口 firewall-cmd --permanent --zone=public --add-service=https (443端口)
  • 删除端口 firewall-cmd --zone=public --remove-port=8080/tcp --permanent
  • 更新防火墙规则 firewall-cmd --reload
  • 查看监听端口 netstat -lnpt

MySQL

由于 CentOS 7 中默认安装了 MariaDB , 需要先进行卸载 (yum方式安装MySQL时可以不用卸载会覆盖, rpm必须卸载)

  • yum list installed | grep mariadb 或者 rpm -qa | grep -i mariadb (mariadb-libs-5.5.68-1.el7.x86_64)
  • rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

安装 MySQL

  • 下载 MySQL
    image.png
  • wget 下载 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz
  • tar 解压 tar -Jxvf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz
  • 移动 mv mysql-8.0.31-linux-glibc2.12-x86_64 /usr/local/mysql-8.0.31
  • 配置 PATH vim /etc/profile
# MySQL
MYSQL_HOME=/usr/local/mysql-8.0.31
export PATH=$PATH:${MYSQL_HOME}/bin
  • 校验 mysql --version

mysql Ver 8.0.31 for Linux on x86_64 (MySQL Community Server - GPL)

配置 MySQL

  • 创建用户组 groupadd mysql
  • 创建用户 useradd -r -g mysql -s /bin/false mysql (r 创建系统用户, g 指定用户组, s /bin/false参数指定mysql用户仅拥有所有权, 而没有登录权限)
  • 创建数据目录 mkdir -p /data/mysql8_data (p 允许创建子目录)
  • 更改权限
    • chown -R mysql:mysql /data/mysql8_data 设置文件所有者和文件关联组的命令
    • chmod -R 750 /data/mysql8_data
  • my.cnf 配置文件 vim /usr/local/mysql-8.0.31/my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
socket=/tmp/mysql.sock

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql-8.0.31
# 数据存放目录
datadir=/data/mysql8_data/mysql
log-bin=/data/mysql8_data/mysql/mysql-bin
innodb_data_home_dir=/data/mysql8_data/mysql
innodb_log_group_home_dir=/data/mysql8_data/mysql
# 日志及进程数据的存放目录
log-error=/data/mysql8_data/mysql/mysql.log
pid-file=/data/mysql8_data/mysql/mysql.pid
lower_case_table_names=1
autocommit=1
# 允许最大连接数
max_connections=10000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
  • 初始化 mysqld --defaults-file=/usr/local/mysql-8.0.31/my.cnf --basedir=/usr/local/mysql-8.0.31 --datadir=/data/mysql8_data/mysql --user=mysql --initialize-insecure
    • --defaults-file 指定配置文件(要放在--initialize 前面)
    • --user 指定用户
    • --basedir 指定安装目录
    • --datadir 指定初始化数据目录
    • --intialize-insecure 初始化无密码(否则生成随机密码)

启动 MySQL

  • 启动
    • /usr/local/mysql-8.0.31/bin/mysqld_safe --defaults-file=/usr/local/mysql-8.0.31/my.cnf & (& 后台运行)
    • mysqld_safe --defaults-file=/usr/local/mysql-8.0.31/my.cnf &
  • 查看 MySQL 服务 ps -ef | grep mysql (第二行就是 MySQL)

root 25556 23175 0 18:48 pts/0 00:00:00 /bin/sh /usr/local/mysql-8.0.31/bin/mysqld_safe --defaults-file=/usr/local/mysql-8.0.31/my.cnf
mysql 25799 25556 1 18:48 pts/0 00:00:00 /usr/local/mysql-8.0.31/bin/mysqld --defaults-file=/usr/local/mysql-8.0.31/my.cnf --basedir=/usr/local/mysql-8.0.31 --datadir=/data/mysql8_data/mysql --plugin-dir=/usr/local/mysql-8.0.31/lib/plugin --user=mysql --log-error=/data/mysql8_data/mysql/mysq.log --pid-file=/data/mysql8_data/mysql/mysql.pid --port=3306
root 26073 23175 0 18:49 pts/0 00:00:00 grep --color=auto mysql

  • 登录
    • mysql -u root --skip-password (之前使用 --initialize-insecure 无密码初始化)
    • mysql -u root -p 首次登录查看密码 cat /var/log/mysqld.log | grep password
  • 首次修改密码 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';
  • 平时修改密码
    • mysqladmin -u root -p 123456 password 456789
    • SET PASSWORD FOR 'root'@'localhost' = PASSWORD(456789');
  • 刷新权限 FLUSH PRIVILEGES;
  • 查询用户 use mysql; SELECT user,host,plugin,authentication_string FROM user;

远程访问

  • 创建远程连接用户 CREATE user 'root'@'%';
  • 设置密码 ALTER USER 'root'@'%' IDENTIFIED BY '12345678' PASSWORD EXPIRE NEVER; (密码永不过期)
  • 授权用户所有权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
  • 刷新权限 FLUSH PRIVILEGES;
  • 查看端口 firewall-cmd --query-port=3306/tcp
  • 开放端口 firewall-cmd --add-port=3306/tcp --permanent
  • 重启防火墙 systemctl restart firewalld

开机自启动

  • 编辑 vim /etc/rc.d/rc.local
  • 添加 /usr/local/mysql-8.0.31/bin/mysqld_safe --defaults-file=/usr/local/mysql-8.0.31/my.cnf >/tmp/mysqld_safe_log.log 2>&1 &
    • command >out.file 是将command的输出重定向到out.file文件
    • 2>&1 将标准错误输出重定向到标准输出 (>&是一个整体, 0 键盘输入, 1 屏幕输出 2错误输出)
    • 最后一个 & 是让该命令在后台执行

Nginx

  • 下载 nginx-1.22.1.tar.gz wget http://nginx.org/download/nginx-1.22.1.tar.gz
  • 解压到指定目录 tar -zvxf nginx-1.22.1.tar.gz
  • 移动 mv nginx-1.22.1 /usr/local/nginx-1.22.1
  • 进入目录 cd /usr/local/nginx-1.22.1, 安装
    • 依次执行 ./configure / make / make install
    • 一起执行 ./configure && make && make install
  • 查找安装路 whereis nginx
  • 检查 http_ssl_module 是否安装 /usr/local/nginx/sbin/nginx -V (configure arguments: –with-http_ssl_module)
  • 配置 SSL 模块 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  • 重新编译 make
  • 切换到安装目录的 sbin 下 cd /usr/local/nginx/sbin
  • 启动 ./nginx
  • 关闭 ./nginx -s stop
  • 重新加载 ./nginx -s reload
  • 查看 ps -ef | grep nginx
  • 自启动服务 vim /etc/rc.d/rc.local 添加 /usr/local/nginx/sbin/nginx >/tmp/nginx_log.log 2>&1
  • 配置 vim /usr/local/nginx/conf/nginx.conf
#user  nobody;
worker_processes  1;

events {
   worker_connections  1024;
}

http {
   include  mime.types;
   default_type  application/octet-stream;
   sendfile  on;
   keepalive_timeout  65;

   # http
   server {
      listen  80;
      server_name  localhost 192.168.1.1;
      location / {
         # 反向代理
         proxy_pass  http://localhost:8080;
      }
   }

   # https
   server {
      listen       443 ssl;
      server_name  localhost 192.168.1.1;

      ssl_certificate /root/ssl/server.crt;
      ssl_certificate_key /root/ssl/server.key;

      location / {
      proxy_pass http://localhost:8080;
      }
   }
}
server
{
   listen 80;
   server_name your-domain.com www.your-domain.com;
   # rewrite:重写指令,$host$:请求地址,$1:请求参数,permanent:永久访问
   #rewrite ^(.*)$ https://$host$1 permanent; 
   return 301 https://$server_name$request_uri; 
}

server 
{
   listen 443 ssl;
   server_name your-domain.com www.your-domain.com;

   ssl on;
   ssl_certificate  /root/ssl/your-domain.crt;
   ssl_certificate_key /root/ssl/your-domain.key;

   ssl_session_timeout 10m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;
   location / {
      root   html;
      index  index.html index.htm;
      proxy_buffer_size  128k;
      proxy_buffers   32 32k;
      proxy_busy_buffers_size 128k;
      proxy_pass http://127.0.0.1:8080;
   }
}

完整的 nginx.conf

#安全问题,建议用nobody,不要用root.
#user  nobody;

#工作进程:数目。根据硬件调整,通常等于cpu数量
worker_processes  2;

#work绑定cpu(4 work绑定4cpu)
#worker_cpu_affinity 0001 0010 0100 1000

#work绑定cpu (4 work绑定8cpu中的4个) 。
#worker_cpu_affinity 0000001 00000010 00000100 00001000

#错误日志存放路径
#error_log path(存放路径) level(日志等级); path表示日志路径,level表示日志等级[ debug | info | notice | warn | error | crit ]
#从左至右,日志详细程度逐级递减,即debug最详细,crit最少,默认为crit。
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# nginx进程pid存放路径
#pid        logs/nginx.pid;

events {
   #这个值是表示每个worker进程所能建立连接的最大值,所以,一个nginx能建立的最大连接数,应该是worker_connections * worker_processes。
   #当然,这里说的是最大连接数,对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes,
   #如果是支持http1.1的浏览器每次访问要占两个连接,
   #所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,
   #而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/4。
   #因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
   worker_connections  1024;

   #这个值是表示nginx要支持哪种多路io复用。
   #一般的Linux选择epoll, 如果是(*BSD)系列的Linux使用kquene。
   #windows版本的nginx不支持多路IO复用,这个值不用配。
   #use epoll;

   # 当一个worker抢占到一个链接时,是否尽可能的让其获得更多的连接,默认是off 。
   #multi_accept on;

   # 默认是on ,开启nginx的抢占锁机制。
   #accept_mutex  on;
}


http {
   #当web服务器收到静态的资源文件请求时,依据请求文件的后缀名在服务器的MIME配置文件中找到对应的MIME Type,再根据MIME Type设置HTTP Response的Content-Type,然后浏览器根据Content-Type的值处理文件。
   include       mime.types;

   #如果 不能从mime.types找到映射的话,用以下作为默认值
   default_type  application/octet-stream;
   
   
   #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
   #                  '$status $body_bytes_sent "$http_referer" '
   #                  '"$http_user_agent" "$http_x_forwarded_for"';
   
   #一条典型的 accesslog:
   #101.226.166.254 - - [21/Oct/2013:20:34:28 +0800] "GET /movie_cat.php?year=2013 HTTP/1.1" 200 5209 "http://www.baidu.com" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0); 360Spider"
   #1)101.226.166.254:(用户IP)
   #2)[21/Oct/2013:20:34:28 +0800]:(访问时间)
   #3)GET:http请求方式,有GET和POST两种
   #4)/movie_cat.php?year=2013:当前访问的网页是动态网页,movie_cat.php即请求的后台接口,year=2013为具体接口的参数
   #5)200:服务状态,200表示正常,常见的还有,301永久重定向、4XX表示请求出错、5XX服务器内部错误
   #6)5209:传送字节数为5209,单位为byte
   #7)"http://www.baidu.com":refer:即当前页面的上一个网页
   #8)"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; #.NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0); 360Spider": agent字段:通常用来记录操作系统、浏览器版本、浏览器内核等信息

   #日志位置
   #access_log  logs/access.log  main;

   #开启从磁盘直接到网络的文件传输,适用于有大文件上传下载的情况,提高IO效率。
   sendfile        on;
   #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用
   #tcp_nopush     on;

   #一个请求完成之后还要保持连接多久, 默认为0,表示完成请求后直接关闭连接。
   #keepalive_timeout  0;
   keepalive_timeout  65;

   #开启或者关闭gzip模块
   #gzip  on ;

   #设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
   #gzip_min_lenth 1k;

   # gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)
   #gzip_comp_level 4;

   #匹配MIME类型进行压缩,(无论是否指定)"text/html"类型总是会被压缩的。
   #gzip_types types text/plain text/css application/json  application/x-javascript text/xml

   #动静分离
   #服务器端静态资源缓存,最大缓存到内存中的文件,不活跃期限
   #open_file_cache max=655350 inactive=20s;

   #活跃期限内最少使用的次数,否则视为不活跃。
   #open_file_cache_min_uses 2;

   #验证缓存是否活跃的时间间隔
   #open_file_cache_valid 30s;

   upstream myserver{
      # 1、轮询(默认)
      # 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
      # 2、指定权重
      # 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
      #3、IP绑定 ip_hash
      # 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
      #4、备机方式 backup
      # 正常情况不访问设定为backup的备机,只有当所有非备机全都宕机的情况下,服务才会进备机。
      #5、fair(第三方)
      #按后端服务器的响应时间来分配请求,响应时间短的优先分配。
      #6、url_hash(第三方)
      #按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

      # ip_hash;
      server 192.168.161.132:8080 weight=1;
      server 192.168.161.132:8081 weight=1;

      #fair
      #hash $request_uri
      #hash_method crc32
   }

   server {
      #监听端口号
      listen       80;

      #配置访问域名,域名可以有多个,用空格隔开 
      server_name  localhost 192.168.161.130;

      #字符集
      #charset utf-8;
      #charset koi8-r;
      
      #access_log  logs/host.access.log  main;
      
       #location [=|~|~*|^~] /uri/ { … }
       # = 精确匹配
       # ~ 正则匹配,区分大小写
       # ~* 正则匹配,不区分大小写
       # ^~  关闭正则匹配
       #匹配原则:
       # 1、所有匹配分两个阶段,第一个叫普通匹配,第二个叫正则匹配。
       # 2、普通匹配,首先通过“=”来匹配完全精确的location
      #   2.1、 如果没有精确匹配到, 那么按照最大前缀匹配的原则,来匹配location
      #   2.2、 如果匹配到的location有^~,则以此location为匹配最终结果,如果没有那么会把匹配的结果暂存,继续进行正则匹配。
      # 3、正则匹配,依次从上到下匹配前缀是~或~*的location, 一旦匹配成功一次,则立刻以此location为准,不再向下继续进行正则匹配。
      # 4、如果正则匹配都不成功,则继续使用之前暂存的普通匹配成功的location.


      location / {
         # 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
          #定义服务器的默认网站根目录位置
         root   html;

          #默认访问首页索引文件的名称
          index  index.html index.htm;

          #反向代理路径
         #proxy_pass http://myserver;

          #反向代理的超时时间
         #proxy_connect_timeout 10;

         #proxy_redirect default;
      }

      location  /images/ {
          root images ;
       }

       location ^~ /images/jpg/ {  # 匹配任何已 /images/jpg/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
          root images/jpg/ ;
       }
      
      location ~*.(gif|jpg|jpeg)$ {
          #所有静态文件直接读取硬盘
         root pic ;

          #expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力
         expires 3d; #缓存3天
      }

      #error_page  404              /404.html;
      # redirect server error pages to the static page /50x.html
      #
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
         root   html;
      }
   }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

Redis

  • 下载 redis wget https://download.redis.io/releases/redis-6.2.11.tar.gz
  • 解压 tar -zxvf redis-6.2.11.tar.gz
  • 移动 mv redis-6.2.11 /usr/local/redis
  • 进入目录 cd /usr/local/redis/
  • 编译 make
  • 安装 make install PREFIX=/usr/local/redis
  • 可以查看配置文件在哪 whereis redis (输出 redis: /usr/local/redis)
  • 拷贝文件 cp redis.conf bin/redis.conf
  • 进入目录 cd /usr/local/redis/bin/
  • 编辑配置文件 vim redis.conf daemonize yes
  • 启动 redis ./redis-server redis.conf, 检查 ps -ef | grep redis

开机自动启动

  1. 目录 cd /lib/systemd/system/
  2. 配置 vim redis.service
[Unit]
Description=redis-server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking

ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 设置
# 开机自动启动
systemctl enable redis.service
# 启动redis服务
systemctl start redis.service
# 查看服务状态
systemctl status redis.service
# 停止服务
systemctl stop redis.service
# 取消开机自动启动(卸载服务)
systemctl disabled redis.service

部署应用

初始化数据库

  • 上传数据库文件 scp app.sql root@192.168.1.2:/root/app_sql
  • 连接数据库, 执行 sql 文件 source /root/app_sql/app.sql
  • 直接执行 sql 文件 mysql -h localhost -u username -p < /root/app_sql/app.sql

部署应用

  • 上传包 scp app.war root@192.168.1.2:/root/app_war
  • 移动到 tomcat 中 mv /root/app.war /usr/tomcat/tomcat8.5/webapps/

鸣谢


  1. https://www.zhihu.com/question/458836408/answer/1879995845

相关文章

网友评论

      本文标题:[运维] 服务器配置 (CentOS 7)

      本文链接:https://www.haomeiwen.com/subject/vlhnxdtx.html