[運(yùn)維] 服務(wù)器配置 (CentOS 7)

服務(wù)器配置

重啟 Linux 服務(wù)器 reboot

安裝方式 (學(xué)習(xí)對(duì)比)

  • OpenJDK 使用 yum 安裝
  • Oracle JDK 使用 rpm 安裝
  • tomcat tar 解壓
  • mysql tar 解壓
  • nginx tar 解壓

自動(dòng)啟動(dòng) (學(xué)習(xí)對(duì)比)

  • tomcat 在 /etc/systemd/system 下創(chuàng)建 mysql.service, 作為服務(wù), 使用 systemd 自啟動(dòng)
  • mysql 編輯 /etc/rc.d/rc.local
  • nginx 編輯 /etc/rc.d/rc.local

常用的啟動(dòng)關(guān)閉

  • 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 進(jìn)程名稱

  • ps 查看服務(wù)器的進(jìn)程信息
  • e 等價(jià)于 A, 列出全部的進(jìn)程
  • f 顯示全部的列 (全字段) (uid 用戶id, pid 進(jìn)程id, ppid 父級(jí)進(jìn)程id, c cpu的占用率, stime 進(jìn)程啟動(dòng)時(shí)間, tty 終端設(shè)備, time 進(jìn)程執(zhí)行時(shí)間, cmd 進(jìn)程的名稱或?qū)?yīng)的路徑)
  • | 管道命令, 是指ps命令與grep同時(shí)執(zhí)行
  • grep 全稱是Global Regular Expression Print垫卤,文本搜索工具, 能使用正則表達(dá)式搜索文本

  • command1 ; command2; 隔開(kāi)每個(gè)命令, 按照從左到右依次執(zhí)行, 忽略是否失敗, 所有命令都會(huì)執(zhí)行
  • command1 | command2 管道符 | 將兩個(gè)命令隔開(kāi)纬霞,管道符左邊命令的輸出就會(huì)作為管道符右邊命令的輸入. 連續(xù)使用管道意味著 第一個(gè)命令的輸出 會(huì)作為 第二個(gè)命令的輸入, 第二個(gè)命令的輸出又會(huì)作為 第三個(gè)命令的輸入 依此類推
  • command1 & 放在啟動(dòng)參數(shù)后面 & 表示設(shè)置此進(jìn)程為后臺(tái)進(jìn)程
  • command1 && command2 [&& command3 ...] 使用 && 連接, 實(shí)現(xiàn)邏輯與的功能. && 前面的命令返回真 (命令返回值 $? == 0), 后面的命令才會(huì)被執(zhí)行
  • command1 || command2 [|| command3 ...] 使用 || 連接, 實(shí)現(xiàn)邏輯或的功能. 只要||前面有一個(gè)命令返回真 (命令返回值 $? == 0), 后面的命令就不會(huì)被執(zhí)行

  • nohup ./abc.sh > abc.log 2>&1 & 后臺(tái)運(yùn)行, 并輸出錯(cuò)誤日志

RPM / YUM[1]

RPM少态,全稱為RPM Package Manager,是由Red Hat推出的軟件包管理系統(tǒng)浑厚,現(xiàn)在在各種發(fā)行版中普遍使用。RPM僅適用于安裝用RPM來(lái)打包的軟件壁却,目前是GNU/Linux下軟件包資源最豐富的軟件包類型寺酪。

Yum (Yellow dog Updater, Modified) 是一個(gè)基于 RPM 包管理的字符前端軟件包管理器,能夠從指定的服務(wù)器自動(dòng)下載 RPM 包并且安裝脚乡,可以自動(dòng)解決處理包依賴性關(guān)系蜒滩,并且一次安裝所有依賴的軟件包,無(wú)須繁瑣地一次次下載奶稠、安裝俯艰,更方便的添加/刪除/更新RPM包,便于管理系統(tǒng)的更新問(wèn)題锌订。被Yellow Dog Linux本身竹握,以及Fedora、Red Hat Enterprise Linux采用辆飘。

RPM

  • -i 表示安裝啦辐。
  • -v, -vv, -vvv 表示詳細(xì)信息。
  • -h 以"#"號(hào)顯示安裝進(jìn)度蜈项。
  • -q 查詢指定包名芹关。
  • -e 卸載指定包名。
  • -U 升級(jí)軟件紧卒,若未軟件尚未安裝侥衬,則安裝軟件。
  • -F 升級(jí)軟件常侦。
  • -V 對(duì)RPM包進(jìn)行驗(yàn)證浇冰。
  • –nodeps 忽略依賴關(guān)系。
  • –query 查詢指定包名聋亡。同-q選項(xiàng)。
  • –hash 同-h际乘。
  • –install 表示安裝坡倔,同-i選項(xiàng)。
  • –test 僅作測(cè)試,不真正執(zhí)行罪塔,可用于測(cè)試安裝投蝉,測(cè)試卸載。
  • –replacepkgs 重新安裝征堪。替換原有的安裝瘩缆。
  • –force 忽略軟件包及文件的沖突。
  • –initdb 新建RPM的數(shù)據(jù)庫(kù)佃蚜。
  • –rebuilddb 重建RPM的數(shù)據(jù)庫(kù)庸娱。
  • –percent 以百分比的形式輸出安裝的進(jìn)度。
  • rpm -q 查詢某一個(gè)RPM包是否已安裝
  • rpm -qi 查詢某一個(gè)RPM包的詳細(xì)信息
  • rpm -ql 列出某RPM包中所包含的文件
  • rpm -qf 查詢某文件是哪個(gè)RPM包生成的
  • rpm -qa 列出當(dāng)前系統(tǒng)所有已安裝的包

YUM

  • yum list installed 顯示已安裝的包
  • yum list available 顯示沒(méi)有安裝, 但可安裝的包
  • yum list updates 查看所有可更新的包
  • yum list obsoletes 顯示被廢棄的包
  • yum search 查詢名 模糊匹配搜索
  • yum install rpm包路徑 安裝本地rpm包
  • yum reinstall 包 安裝本地rpm包
  • yum update -y 包/rpm包路徑 升級(jí)軟件包 (y 自動(dòng) yes)
  • yum remove 包 卸載軟件包

tar

tar 是用來(lái)建立谐算,還原備份文件的工具程序熟尉,它可以加入,解開(kāi)備份文件內(nèi)的文件洲脂。

格式

  • .tar 默認(rèn)模式斤儿,不壓縮,只是將所有文件放到一個(gè)包里恐锦。
  • .tar.gz 常用模式往果,采用gzip算法壓縮。壓縮率一般一铅,壓縮時(shí)間中等陕贮。
  • .tar.bz2 不常用。采用bz2算法壓縮馅闽。壓縮率稍差飘蚯,壓縮時(shí)間較短。
  • .tar.xz 不常用福也,采用xz算法壓縮局骤。壓縮率較好,壓縮時(shí)間較長(zhǎng)暴凑。

參數(shù)

  • -f<備份文件>或--file=<備份文件> 指定備份文件峦甩。
  • -v或--verbose 顯示指令執(zhí)行過(guò)程。
  • -x或--extract或--get 從備份文件中還原文件现喳。
  • -z或--gzip或--ungzip 通過(guò)gzip指令處理備份文件凯傲。
  • -j 通過(guò)bzip2命令壓縮或解壓

解壓

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

配置文件

  • /etc/profile 全局所有用戶有效
  • ~/.bash_profile 當(dāng)前用戶有效

JDK

  • 檢查系統(tǒng)環(huán)境 uname -a
  • 查看系統(tǒng)是否自帶 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默認(rèn)安裝路徑為 /usr/lib/jvm)

Oracle JDK (rpm 安裝)

  • 上傳 Oracle JDK 到服務(wù)器
    • 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 顯示更詳細(xì)的信息(verbose)
    • -h 打印 #,顯示安裝進(jìn)度(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)

  • 可執(zhí)行程序放到那里去了 which java (/usr/bin/java)
  • 配置 JDK, 編輯 profile 文件 vim /etc/profile (如果存在多個(gè) jdk/tomcat, 可以單獨(dú)配置在 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 到服務(wù)器 scp apache-tomcat-8.5.83.tar.gz root@192.168.1.1:/root
    • 在服務(wù)器使用 wget 直接下載 wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.83/bin/apache-tomcat-8.5.83.tar.gz
  • 創(chuàng)建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無(wú)需確認(rèn)直接刪除)
  • 改名目錄名為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
  • 重新加載防火墻規(guī)則 firewall-cmd --reload
  • 啟動(dòng) tomcat cd /usr/tomcat/tomcat8.5/bin && sh startup.sh

配置開(kāi)機(jī)啟動(dòng)

  • 創(chuàng)建Tomcat8服務(wù)文件 vim /usr/lib/systemd/system/tomcat8.service
#tomcat8.service文件內(nèi)容
[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking #后臺(tái)運(yùn)行的形式

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
  • 設(shè)置Tomcat8開(kāi)機(jī)啟動(dòng) systemctl enable tomcat8
  • 查看是否開(kāi)機(jī)自啟 systemctl list-unit-files | grep tomcat8
  • 啟動(dòng)/關(guān)閉 tomcat8服務(wù) systemctl start tomcat8 / systemctl stop tomcat8
  • tomcat8 狀態(tài) systemctl status tomcat8

防火墻 (systemctl)

CentOS 7 默認(rèn)使用的是 firewall 作為防火墻, 使用 systemctl 來(lái)管理服務(wù)和程序, 融合之前 service 和 chkconfig 的功能

systemctl

  • 查看防火墻是否開(kāi)機(jī)自啟 systemctl is-enabled firewalld.service; echo $? / systemctl list-unit-files | grep firewalld
  • 禁止開(kāi)機(jī)啟動(dòng) systemctl disable firewalld.service
  • 開(kāi)機(jī)啟動(dòng) systemctl enable firewalld.service
  • 開(kāi)機(jī)啟動(dòng)列表 systemctl list-unit-files | grep enabled
  • 關(guān)閉防火墻 systemctl stop firewalld.service
  • 開(kāi)啟防火墻 systemctl start firewalld.service
  • 重啟防火墻 systemctl restart firewalld.service
  • 查看防火墻狀態(tài)
    • systemctl status firewalld.service
    • firewall-cmd --state

防火墻 (firewall-cmd)

  • 查看開(kāi)放的端口 firewall-cmd --list-all / firewall-cmd --list-ports / firewall-cmd --zone=public --list-ports
  • 端口是否開(kāi)放 firewall-cmd --query-port=8080/tcp
  • 開(kāi)放端口 firewall-cmd --permanent --zone=public --add-port=8080/tcp (permanent永久生效)
  • 開(kāi)放端口 firewall-cmd --permanent --zone=public --add-service=http (80端口)
  • 開(kāi)放端口 firewall-cmd --permanent --zone=public --add-service=https (443端口)
  • 刪除端口 firewall-cmd --zone=public --remove-port=8080/tcp --permanent
  • 更新防火墻規(guī)則 firewall-cmd --reload
  • 查看監(jiān)聽(tīng)端口 netstat -lnpt

MySQL

由于 CentOS 7 中默認(rèn)安裝了 MariaDB , 需要先進(jìn)行卸載 (yum方式安裝MySQL時(shí)可以不用卸載會(huì)覆蓋, 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
  • 移動(dòng) 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
  • 校驗(yàn) mysql --version

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

配置 MySQL

  • 創(chuàng)建用戶組 groupadd mysql
  • 創(chuàng)建用戶 useradd -r -g mysql -s /bin/false mysql (r 創(chuàng)建系統(tǒng)用戶, g 指定用戶組, s /bin/false參數(shù)指定mysql用戶僅擁有所有權(quán), 而沒(méi)有登錄權(quán)限)
  • 創(chuàng)建數(shù)據(jù)目錄 mkdir -p /data/mysql8_data (p 允許創(chuàng)建子目錄)
  • 更改權(quán)限
    • chown -R mysql:mysql /data/mysql8_data 設(shè)置文件所有者和文件關(guān)聯(lián)組的命令
    • chmod -R 750 /data/mysql8_data
  • my.cnf 配置文件 vim /usr/local/mysql-8.0.31/my.cnf
[mysql]
# 設(shè)置mysql客戶端默認(rèn)字符集
default-character-set=utf8mb4

[client]
# 設(shè)置mysql客戶端連接服務(wù)端時(shí)默認(rèn)使用的端口
port=3306
socket=/tmp/mysql.sock

[mysqld]
# 設(shè)置3306端口
port=3306
# 設(shè)置mysql的安裝目錄
basedir=/usr/local/mysql-8.0.31
# 數(shù)據(jù)存放目錄
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
# 日志及進(jìn)程數(shù)據(jù)的存放目錄
log-error=/data/mysql8_data/mysql/mysql.log
pid-file=/data/mysql8_data/mysql/mysql.pid
lower_case_table_names=1
autocommit=1
# 允許最大連接數(shù)
max_connections=10000
# 允許連接失敗的次數(shù)嗦篱。這是為了防止有人從該主機(jī)試圖攻擊數(shù)據(jù)庫(kù)系統(tǒng)
max_connect_errors=10
# 服務(wù)端使用的字符集默認(rèn)為UTF8
character-set-server=utf8
# 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎
default-storage-engine=INNODB
# 默認(rèn)使用“mysql_native_password”插件認(rèn)證
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 指定初始化數(shù)據(jù)目錄
    • --intialize-insecure 初始化無(wú)密碼(否則生成隨機(jī)密碼)

啟動(dòng) MySQL

  • 啟動(dòng)
    • /usr/local/mysql-8.0.31/bin/mysqld_safe --defaults-file=/usr/local/mysql-8.0.31/my.cnf & (& 后臺(tái)運(yùn)行)
    • mysqld_safe --defaults-file=/usr/local/mysql-8.0.31/my.cnf &
  • 查看 MySQL 服務(wù) 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 無(wú)密碼初始化)
    • mysql -u root -p 首次登錄查看密碼 cat /var/log/mysqld.log | grep password
  • 首次修改密碼 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';
  • 平時(shí)修改密碼
    • mysqladmin -u root -p 123456 password 456789
    • SET PASSWORD FOR 'root'@'localhost' = PASSWORD(456789');
  • 刷新權(quán)限 FLUSH PRIVILEGES;
  • 查詢用戶 use mysql; SELECT user,host,plugin,authentication_string FROM user;

遠(yuǎn)程訪問(wèn)

  • 創(chuàng)建遠(yuǎn)程連接用戶 CREATE user 'root'@'%';
  • 設(shè)置密碼 ALTER USER 'root'@'%' IDENTIFIED BY '12345678' PASSWORD EXPIRE NEVER; (密碼永不過(guò)期)
  • 授權(quán)用戶所有權(quán)限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
  • 刷新權(quán)限 FLUSH PRIVILEGES;
  • 查看端口 firewall-cmd --query-port=3306/tcp
  • 開(kāi)放端口 firewall-cmd --add-port=3306/tcp --permanent
  • 重啟防火墻 systemctl restart firewalld

開(kāi)機(jī)自啟動(dòng)

  • 編輯 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 將標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到標(biāo)準(zhǔn)輸出 (>&是一個(gè)整體, 0 鍵盤(pán)輸入, 1 屏幕輸出 2錯(cuò)誤輸出)
    • 最后一個(gè) & 是讓該命令在后臺(tái)執(zhí)行

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
  • 移動(dòng) mv nginx-1.22.1 /usr/local/nginx-1.22.1
  • 進(jìn)入目錄 cd /usr/local/nginx-1.22.1, 安裝
    • 依次執(zhí)行 ./configure / make / make install
    • 一起執(zhí)行 ./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
  • 啟動(dòng) ./nginx
  • 關(guān)閉 ./nginx -s stop
  • 重新加載 ./nginx -s reload
  • 查看 ps -ef | grep nginx
  • 自啟動(dòng)服務(wù) 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:重寫(xiě)指令冰单,$host$:請(qǐng)求地址,$1:請(qǐng)求參數(shù)灸促,permanent:永久訪問(wèn)
   #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

#安全問(wèn)題诫欠,建議用nobody,不要用root.
#user  nobody;

#工作進(jìn)程:數(shù)目涵卵。根據(jù)硬件調(diào)整,通常等于cpu數(shù)量
worker_processes  2;

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

#work綁定cpu (4 work綁定8cpu中的4個(gè)) 荒叼。
#worker_cpu_affinity 0000001 00000010 00000100 00001000

#錯(cuò)誤日志存放路徑
#error_log path(存放路徑) level(日志等級(jí)); path表示日志路徑轿偎,level表示日志等級(jí)[ debug | info | notice | warn | error | crit ]
#從左至右,日志詳細(xì)程度逐級(jí)遞減被廓,即debug最詳細(xì)坏晦,crit最少,默認(rèn)為crit嫁乘。
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# nginx進(jìn)程pid存放路徑
#pid        logs/nginx.pid;

events {
   #這個(gè)值是表示每個(gè)worker進(jìn)程所能建立連接的最大值昆婿,所以,一個(gè)nginx能建立的最大連接數(shù)亦渗,應(yīng)該是worker_connections * worker_processes挖诸。
   #當(dāng)然,這里說(shuō)的是最大連接數(shù)法精,對(duì)于HTTP請(qǐng)求本地資源來(lái)說(shuō)多律,能夠支持的最大并發(fā)數(shù)量是worker_connections * worker_processes,
   #如果是支持http1.1的瀏覽器每次訪問(wèn)要占兩個(gè)連接搂蜓,
   #所以普通的靜態(tài)訪問(wèn)最大并發(fā)數(shù)是: worker_connections * worker_processes /2狼荞,
   #而如果是HTTP作為反向代理來(lái)說(shuō),最大并發(fā)數(shù)量應(yīng)該是worker_connections * worker_processes/4帮碰。
   #因?yàn)樽鳛榉聪虼矸?wù)器相味,每個(gè)并發(fā)會(huì)建立與客戶端的連接和與后端服務(wù)的連接,會(huì)占用兩個(gè)連接殉挽。
   worker_connections  1024;

   #這個(gè)值是表示nginx要支持哪種多路io復(fù)用丰涉。
   #一般的Linux選擇epoll, 如果是(*BSD)系列的Linux使用kquene。
   #windows版本的nginx不支持多路IO復(fù)用斯碌,這個(gè)值不用配一死。
   #use epoll;

   # 當(dāng)一個(gè)worker搶占到一個(gè)鏈接時(shí),是否盡可能的讓其獲得更多的連接,默認(rèn)是off 傻唾。
   #multi_accept on;

   # 默認(rèn)是on ,開(kāi)啟nginx的搶占鎖機(jī)制投慈。
   #accept_mutex  on;
}


http {
   #當(dāng)web服務(wù)器收到靜態(tài)的資源文件請(qǐng)求時(shí),依據(jù)請(qǐng)求文件的后綴名在服務(wù)器的MIME配置文件中找到對(duì)應(yīng)的MIME Type冠骄,再根據(jù)MIME Type設(shè)置HTTP Response的Content-Type伪煤,然后瀏覽器根據(jù)Content-Type的值處理文件。
   include       mime.types;

   #如果 不能從mime.types找到映射的話凛辣,用以下作為默認(rèn)值
   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]:(訪問(wèn)時(shí)間)
   #3)GET:http請(qǐng)求方式抱既,有GET和POST兩種
   #4)/movie_cat.php?year=2013:當(dāng)前訪問(wèn)的網(wǎng)頁(yè)是動(dòng)態(tài)網(wǎng)頁(yè),movie_cat.php即請(qǐng)求的后臺(tái)接口扁誓,year=2013為具體接口的參數(shù)
   #5)200:服務(wù)狀態(tài)蝙砌,200表示正常阳堕,常見(jiàn)的還有跋理,301永久重定向择克、4XX表示請(qǐng)求出錯(cuò)、5XX服務(wù)器內(nèi)部錯(cuò)誤
   #6)5209:傳送字節(jié)數(shù)為5209前普,單位為byte
   #7)"http://www.baidu.com":refer:即當(dāng)前頁(yè)面的上一個(gè)網(wǎng)頁(yè)
   #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字段:通常用來(lái)記錄操作系統(tǒng)肚邢、瀏覽器版本、瀏覽器內(nèi)核等信息

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

   #開(kāi)啟從磁盤(pán)直接到網(wǎng)絡(luò)的文件傳輸拭卿,適用于有大文件上傳下載的情況骡湖,提高IO效率。
   sendfile        on;
   #此選項(xiàng)允許或禁止使用socket的TCP_CORK的選項(xiàng)峻厚,此選項(xiàng)僅在sendfile的時(shí)候使用
   #tcp_nopush     on;

   #一個(gè)請(qǐng)求完成之后還要保持連接多久, 默認(rèn)為0响蕴,表示完成請(qǐng)求后直接關(guān)閉連接。
   #keepalive_timeout  0;
   keepalive_timeout  65;

   #開(kāi)啟或者關(guān)閉gzip模塊
   #gzip  on ;

   #設(shè)置允許壓縮的頁(yè)面最小字節(jié)數(shù)惠桃,頁(yè)面字節(jié)數(shù)從header頭中的Content-Length中進(jìn)行獲取浦夷。
   #gzip_min_lenth 1k;

   # gzip壓縮比,1 壓縮比最小處理速度最快辜王,9 壓縮比最大但處理最慢(傳輸快但比較消耗cpu)
   #gzip_comp_level 4;

   #匹配MIME類型進(jìn)行壓縮劈狐,(無(wú)論是否指定)"text/html"類型總是會(huì)被壓縮的。
   #gzip_types types text/plain text/css application/json  application/x-javascript text/xml

   #動(dòng)靜分離
   #服務(wù)器端靜態(tài)資源緩存呐馆,最大緩存到內(nèi)存中的文件肥缔,不活躍期限
   #open_file_cache max=655350 inactive=20s;

   #活躍期限內(nèi)最少使用的次數(shù),否則視為不活躍汹来。
   #open_file_cache_min_uses 2;

   #驗(yàn)證緩存是否活躍的時(shí)間間隔
   #open_file_cache_valid 30s;

   upstream myserver{
      # 1续膳、輪詢(默認(rèn))
      # 每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉收班,能自動(dòng)剔除坟岔。
      # 2、指定權(quán)重
      # 指定輪詢幾率闺阱,weight和訪問(wèn)比率成正比炮车,用于后端服務(wù)器性能不均的情況。
      #3酣溃、IP綁定 ip_hash
      # 每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配瘦穆,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題赊豌。
      #4扛或、備機(jī)方式 backup
      # 正常情況不訪問(wèn)設(shè)定為backup的備機(jī),只有當(dāng)所有非備機(jī)全都宕機(jī)的情況下碘饼,服務(wù)才會(huì)進(jìn)備機(jī)熙兔。
      #5悲伶、fair(第三方)
      #按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配住涉。
      #6麸锉、url_hash(第三方)
      #按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器舆声,后端服務(wù)器為緩存時(shí)比較有效花沉。

      # 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 {
      #監(jiān)聽(tīng)端口號(hào)
      listen       80;

      #配置訪問(wèn)域名,域名可以有多個(gè)媳握,用空格隔開(kāi) 
      server_name  localhost 192.168.161.130;

      #字符集
      #charset utf-8;
      #charset koi8-r;
      
      #access_log  logs/host.access.log  main;
      
       #location [=|~|~*|^~] /uri/ { … }
       # = 精確匹配
       # ~ 正則匹配碱屁,區(qū)分大小寫(xiě)
       # ~* 正則匹配,不區(qū)分大小寫(xiě)
       # ^~  關(guān)閉正則匹配
       #匹配原則:
       # 1蛾找、所有匹配分兩個(gè)階段娩脾,第一個(gè)叫普通匹配,第二個(gè)叫正則匹配打毛。
       # 2柿赊、普通匹配,首先通過(guò)“=”來(lái)匹配完全精確的location
      #   2.1隘冲、 如果沒(méi)有精確匹配到闹瞧, 那么按照最大前綴匹配的原則,來(lái)匹配location
      #   2.2展辞、 如果匹配到的location有^~,則以此location為匹配最終結(jié)果奥邮,如果沒(méi)有那么會(huì)把匹配的結(jié)果暫存,繼續(xù)進(jìn)行正則匹配罗珍。
      # 3洽腺、正則匹配,依次從上到下匹配前綴是~或~*的location, 一旦匹配成功一次覆旱,則立刻以此location為準(zhǔn)蘸朋,不再向下繼續(xù)進(jìn)行正則匹配。
      # 4扣唱、如果正則匹配都不成功藕坯,則繼續(xù)使用之前暫存的普通匹配成功的location.


      location / {
         # 匹配任何查詢,因?yàn)樗姓?qǐng)求都已 / 開(kāi)頭噪沙。但是正則表達(dá)式規(guī)則和長(zhǎng)的塊規(guī)則將被優(yōu)先和查詢匹配炼彪。
          #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
         root   html;

          #默認(rèn)訪問(wèn)首頁(yè)索引文件的名稱
          index  index.html index.htm;

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

          #反向代理的超時(shí)時(shí)間
         #proxy_connect_timeout 10;

         #proxy_redirect default;
      }

      location  /images/ {
          root images ;
       }

       location ^~ /images/jpg/ {  # 匹配任何已 /images/jpg/ 開(kāi)頭的任何查詢并且停止搜索。任何正則表達(dá)式將不會(huì)被測(cè)試正歼。
          root images/jpg/ ;
       }
      
      location ~*.(gif|jpg|jpeg)$ {
          #所有靜態(tài)文件直接讀取硬盤(pán)
         root pic ;

          #expires定義用戶瀏覽器緩存的時(shí)間為3天辐马,如果靜態(tài)頁(yè)面不常更新,可以設(shè)置更長(zhǎng)局义,這樣可以節(jié)省帶寬和緩解服務(wù)器的壓力
         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
  • 移動(dòng) mv redis-6.2.11 /usr/local/redis
  • 進(jìn)入目錄 cd /usr/local/redis/
  • 編譯 make
  • 安裝 make install PREFIX=/usr/local/redis
  • 可以查看配置文件在哪 whereis redis (輸出 redis: /usr/local/redis)
  • 拷貝文件 cp redis.conf bin/redis.conf
  • 進(jìn)入目錄 cd /usr/local/redis/bin/
  • 編輯配置文件 vim redis.conf daemonize yes
  • 啟動(dòng) redis ./redis-server redis.conf, 檢查 ps -ef | grep redis

開(kāi)機(jī)自動(dòng)啟動(dòng)

  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. 設(shè)置
# 開(kāi)機(jī)自動(dòng)啟動(dòng)
systemctl enable redis.service
# 啟動(dòng)redis服務(wù)
systemctl start redis.service
# 查看服務(wù)狀態(tài)
systemctl status redis.service
# 停止服務(wù)
systemctl stop redis.service
# 取消開(kāi)機(jī)自動(dòng)啟動(dòng)(卸載服務(wù))
systemctl disabled redis.service

部署應(yīng)用

初始化數(shù)據(jù)庫(kù)

  • 上傳數(shù)據(jù)庫(kù)文件 scp app.sql root@192.168.1.2:/root/app_sql
  • 連接數(shù)據(jù)庫(kù), 執(zhí)行 sql 文件 source /root/app_sql/app.sql
  • 直接執(zhí)行 sql 文件 mysql -h localhost -u username -p < /root/app_sql/app.sql

部署應(yīng)用

  • 上傳包 scp app.war root@192.168.1.2:/root/app_war
  • 移動(dòng)到 tomcat 中 mv /root/app.war /usr/tomcat/tomcat8.5/webapps/

鳴謝


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喜爷,一起剝皮案震驚了整個(gè)濱河市冗疮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌檩帐,老刑警劉巖术幔,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異轿塔,居然都是意外死亡特愿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)勾缭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人目养,你說(shuō)我怎么就攤上這事俩由。” “怎么了癌蚁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵幻梯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我努释,道長(zhǎng)碘梢,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任伐蒂,我火速辦了婚禮煞躬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逸邦。我一直安慰自己恩沛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布缕减。 她就那樣靜靜地躺著雷客,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桥狡。 梳的紋絲不亂的頭發(fā)上搅裙,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音裹芝,去河邊找鬼部逮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛局雄,可吹牛的內(nèi)容都是我干的甥啄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼炬搭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜈漓!你這毒婦竟也來(lái)了穆桂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤融虽,失蹤者是張志新(化名)和其女友劉穎享完,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體有额,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡般又,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巍佑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茴迁。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖萤衰,靈堂內(nèi)的尸體忽然破棺而出堕义,到底是詐尸還是另有隱情,我是刑警寧澤脆栋,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布倦卖,位于F島的核電站,受9級(jí)特大地震影響椿争,放射性物質(zhì)發(fā)生泄漏怕膛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一秦踪、第九天 我趴在偏房一處隱蔽的房頂上張望褐捻。 院中可真熱鬧,春花似錦洋侨、人聲如沸舍扰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)边苹。三九已至,卻和暖如春裁僧,著一層夾襖步出監(jiān)牢的瞬間个束,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工聊疲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茬底,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓获洲,卻偏偏與公主長(zhǎng)得像阱表,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容