前情提要
問:如何通過nginx的反向代理,代理多臺虛擬主機(一臺apache服務器上的虛擬主機)?
1.在nginx的配置文件中,將基于域名的訪問改為基于端口的訪問(nginx.conf)
upstream daili{server www1.xxhf.com; #默認80端口server www2.xxhf.com:90; #改為90端口server 192.168.77.79;}server {location / {proxy_pass http://daili;}}
2.在nginx服務器的hosts文件中配置域名解析(/etc/hosts)
192.168.77.78 www1.xxhf.com
192.168.77.78 www2.xxhf.com
3.修改apache主配置文件,監聽90端口
Listen 80
Listen 90
4.如果用rpm包安裝apache服務,則沒有子配置文件,需要到/usr/share/doc/httpd-core/httpd-vhost.conf中復制模版到/etc/httpd/conf.d目錄下
總結:反向代理的upstream可通過dns解析域名獲得ip,但因為解析時機要比調用時機更早,因為真正調用時只能獲取到相同的apache服務器ip,按順序找到第一臺虛擬主機。
一、靜態和動態資源
靜態資源 ? .html ?.htm
- 使用靜態網頁開發技術發布的資源
- 如:文本、音視頻、HTML、CSS、JS等
- 標記語言、直接映射
動態資源? .php .java
- 使用動態網頁開發技術發布的資源
- 如:jsp/servlet、php等
- 編程語言、有邏輯
1.服務器處理html文件
- web服務器去網頁根目錄找到index.html文件,隨后將內容返回給瀏覽器去解析
2.服務器處理php文件
- web服務器將動態的php頁面轉成靜態,即輸出代碼運行結果,將結果返回給瀏覽器
3.LAMP關系
- LAMP:Linux + Apache + MySQL + PHP
- Linux:系統,提供環境支持
- Apache:網站服務,部署網站、處理網頁請求?
- MySQL:數據庫,網站數據的持久化存儲
- PHP:編程語言,網站動態資源的解析
4.A與P的關聯方法
- mod_php:修改apache配置文件,使其識別*.php文件,進而加載php模塊解析動態頁面
- php_fpm:啟動php-fpm進程,交給代理fastcgi,將http服務器和腳本解析器分離;當http服務器每次遇到動態請求時,直接交付給fastcgi進程去執行,然后把結果返回給瀏覽器
注:apache和php使用rpm包安裝,會自動配置關聯——php_fpm進程
二、Apache+PHP組合
服務器:77.79
1.rpm包安裝httpd和php
[root@localhost ~]# dnf -y install httpd
[root@localhost ~]# dnf -y install php
2.自動配置關聯
3.直接部署頁面,瀏覽器訪問
[root@localhost ~]# vi /var/www/html/test.php
<?phpecho "hello world";
?>
三、Nginx+PHP組合
服務器:77.77
1.rpm包安裝nginx和php
[root@localhost ~]# dnf -y install php nginx
2.修改php配置文件參數
注:nginx無法處理php腳本,需要安裝php解釋器調用腳本,但直接安裝的php解釋器默認用戶是apache服務,需要改成nginx
[root@localhost ~]# vi /etc/php-fpm.d/www.confuser = nginx
group = nginx
3.啟動php-fpm進程,重載服務
systemctl start php-fpm
vi /usr/share/nginx/html/test.php
<?phpecho "hello world";
?>
/sbin/nginx -s reload
4.采用其他方式載入動態資源
注:關閉77.77的php進程,通過反向代理,將動態請求移交給后端已經配置好php解釋器的apache(77.79)服務器去處理
(1)修改nginx.conf配置文件,同時修改apache服務頁面,以免混淆
[root@localhost ~]# systemctl stop php-fpm #關閉php進程
[root@localhost ~]# vi /etc/nginx/nginx.conflocation ~ \.php {proxy_pass 192.168.77.79; #將php文件請求移交給apache服務}
注:雖然關閉了php進程,但依舊有兩個文件影響了反向代理的跳轉,需要手動刪掉
rm -rf /etc/nginx/conf.d/php.conf
rm -rf /etc/nginx/default.d/php.conf
(2)重啟nginx,測試
????????????????????四、PHP調用MySql
注:php調用mysql的中間工具——php-mysqli、php-pdo
1.安裝mariadb數據庫
[root@localhost ~]# dnf -y install mariadb mariadb-server php-mysqli php-pdo
2.啟動數據庫,端口號3306
#開啟服務
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# ss -anpt | grep :3306
LISTEN 0 80 *:3306 *:* users:(("mariadbd",pid=3089,fd=17)) #執行mysql
[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.22-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.#創建用戶
MariaDB [(none)]> create user lisi @'%'identified by'123';
Query OK, 0 rows affected (0.002 sec)
#授權
MariaDB [(none)]> grant all on *.* to lisi@'%';
Query OK, 0 rows affected (0.001 sec)
#退出
MariaDB [(none)]> exit
Bye
#客戶端連接mysql服務器
[root@localhost ~]# mysql -h192.168.77.79 -p3306 -ulisi -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.5.22-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#創建一個庫
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.001 sec)
#查看mysql有哪些數據庫
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| db1 |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)
3.部署wordpress項目
注:LAMP環境已經搭建好,wordpress項目也是通過php編寫的項目,可以直接導入web服務網頁根目錄(77.79),添加權限后啟動
[root@localhost html]# pwd
/var/www/html
[root@localhost html]# ll
total 12
-rw-r--r-- 1 root root 20 Sep 15 16:30 index.html
-rw-r--r-- 1 root root 60 Sep 15 21:50 test.php
drwxr-xr-x 5 apache apache 4096 Sep 16 09:08 wordpress
[root@localhost html]#
也可以使用nginx(77.77)反向代理去訪問apache服務器(77.79)的wordpress項目,只需在nginx.conf配置文件中設置即可
location /wordpress {proxy_pass http://192.168.77.79;}
五、Tomcat+java組合
服務器:77.77(恢復快照后的純凈版)
補充知識:
- tomcat是web應用服務器,可以處理http請求和只處理動態java代碼
注:因為tomcat是有java代碼編寫,因此安裝tomcat前需要先安裝java環境
1.源碼包安裝
在網頁端下載jdk——java開發工具包,將其導入linux并解壓
[root@localhost ltmj-r9]# ls
apache-tomcat-9.0.48.tar.gz jdk-11.0.11_linux-x64_bin.tar.gz mariadb-10.6.17.tar.gz mypress.war mysql-connector-java-5.1.24.jar
[root@localhost ltmj-r9]# tar -zxf jdk-11.0.11_linux-x64_bin.tar.gz
[root@localhost ltmj-r9]# ls
apache-tomcat-9.0.48.tar.gz jdk-11.0.11_linux-x64_bin.tar.gz mypress.war
jdk-11.0.11 mariadb-10.6.17.tar.gz mysql-connector-java-5.1.24.jar
[root@localhost ltmj-r9]# cp -a jdk-11.0.11 /usr/local/jdk11
#安裝jdk指定版本、覆蓋系統默認安裝的
2.配置環境變量
注:默認安裝的jdk在/usr/bin下
vi /etc/profile
export JAVA_HOME=/usr/local/jdk11
PATH=$PATH:$JAVA_HOME/bin
#這里之所以分出JAVA_HOME是因為有的java項目會去找這個變量
[root@localhost ltmj-r9]# source /etc/profile #讓配置文件生效
3.測試環境,查看版本
#配置好環境變量之后,才能使用java命令
[root@localhost ~]# java -version
java version "11.0.11" 2021-04-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)
#說明jkd環境已經安裝完畢
4.創建java文件,測試效果
vim HelloWorld.javapublic class HelloWorld{
public static void main(String[] args) {
System.out.println("hello world~");
}
}
效果
#編譯,生成.class文件
[root@localhost ~]# javac HelloWorld.java
[root@localhost ~]# ls
anaconda-ks.cfg cat.sh HelloWorld.class HelloWorld.java ltmj-r9 ltmj-r9.tar.gz
#執行
[root@localhost ~]# java HelloWorld
hello world~
5.源碼包安裝Tomcat
[root@localhost ltmj-r9]# tar -zxf apache-tomcat-9.0.48.tar.gz
[root@localhost ltmj-r9]# ls
apache-tomcat-9.0.48 jdk-11.0.11 mariadb-10.6.17.tar.gz mysql-connector-java-5.1.24.jar
apache-tomcat-9.0.48.tar.gz jdk-11.0.11_linux-x64_bin.tar.gz mypress.war
[root@localhost ltmj-r9]# cp -a apache-tomcat-9.0.48 /usr/local/tomcat9
啟動服務
/usr/local/tomcat9/bin/catalina.sh start
/usr/local/tomcat9/bin/catalina.sh stop
或:
/usr/local/tomcat9/bin/startup.sh
/usr/local/tomcat9/bin/shutdown.sh
6.測試Tomcat服務器
基本參數
- 默認端口:8080
- 配置文件:安裝目錄/conf/server.xml
- 網頁根目錄:安裝目錄/webapps
- 默認網頁文件:安裝目錄/webapps/ROOT/index.jsp
- 日志文件:安裝目錄/logs
[root@localhost ~]# /usr/local/tomcat9/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat9
Using CATALINA_HOME: /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME: /usr/local/jdk11
Using CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@localhost ~]# ss -anpt | grep :8080
LISTEN 0 100 *:8080 *:* users:(("java",pid=1844,fd=43))
訪問頁面:
http://ServerIP:8080
六、Tomcat部署項目(LTMJ)
rpm包安裝(77.78)——純凈版
1.安裝tomcat和數據庫mariadb
[root@localhost ~]# dnf -y install tomcat mariadb mariadb-server[root@localhost ~]# systemctl start tomcat
[root@localhost ~]# ss -anpt | grep :8080
LISTEN 0 100 *:8080 *:* users:(("java",pid=14256,fd=46))
補充知識:
- rpm包參數
- 端口:8080
- 配置文件:/usr/share/tomcat/conf/server.xml
- 日志:/usr/share/tomcat/logs
- 網頁根目錄:/usr/share/tomcat/webapps
- 依賴庫:/usr/share/tomcat/lib
- 默認網頁文件/usr/share/tomcat/webapps/ROOT/index.jsp
2.啟動數據庫,創建用戶
[root@localhost conf]# systemctl start mariadb
[root@localhost conf]# mysqlWelcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.22-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> create user lisi @'%'identified by'123';
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]> grant all on *.* to lisi@'%';
Query OK, 0 rows affected (0.002 sec)MariaDB [(none)]> create database xiangmu;
Query OK, 1 row affected (0.001 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| xiangmu |
+--------------------+
4 rows in set (0.001 sec)
3.創建默認網頁文件
注:當前網頁根目錄下沒有頁面,需要手動創建ROOT目錄和index.jsp網頁文件
[root@localhost webapps]# mkdir ROOT
[root@localhost webapps]# echo "hello world" >> ROOT/index.jsp
4.部署一個mypress項目
注:該mypress項目已經做好,只需要下載包到webapps目錄下即可自動解包和部署
[root@localhost webapps]# ls
mypress mypress.war ROOT
直接訪問頁面:192.168.77.78:8080/mypress
但是輸入數據后登錄卻發現請求失敗,是因為缺少了一個依賴,導致java無法連接數據庫
下載依賴到lib庫當中,這里我將包放在了77.77服務器上,可以直接拿過來
[root@localhost webapps]# cd ..
[root@localhost tomcat]# cd lib/
[root@localhost lib]# scp 192.168.77.77:/root/ltmj-r9/mysql-connector-java-5.1.24.jar .
再次重啟tomcat,點擊提交,就可以正常跳轉登錄界面
5.通過nginx代理訪問服務
(1)使用rmp包安裝nginx(77.79)
[root@localhost ~]# dnf -y install nginx
(2)修改配置文件,添加代理
location /mypress {proxy_pass http://192.168.77.78:8080;}
(3)重啟服務,通過網頁登錄測試:192.168.77.79/mypress
七、相關配置修改
1.Tomcat源碼包修改端口
(1)直接修改server.xml配置文件
<Connector port="80" protocol="HTTP/1.1"
(2)重啟tomcat服務,測試
[root@localhost tomcat9]# ./bin/catalina.sh stop
[root@localhost tomcat9]# ./bin/catalina.sh start
2.Tomcat-RPM包修改端口
注:rpm修改端口時,無法將端口修改至1024以下,因為啟動進程的用戶是普通用戶tomcat,需要修改成root用戶才可以正常修改至80端口
(1)查看當前進程,發先用戶是tomcat
(2)修改配置文件,重啟進程,再查看進程
#注釋掉服務中的tomcat用戶
[root@localhost ~]# vi /usr/lib/systemd/system/tomcat.service
#User=tomcat[root@localhost ~]# systemctl restart tomcat
(3)修改端口號為80,重啟服務測試(這里的頁面是我自己添加的默認網頁文件)
[root@localhost tomcat]# vi conf/server.xml
3.使用域名訪問Tomcat
(1)修改配置文件server.conf
<Host name="tomcat.xxhf.com" appBase="webapps"unpackWARs="true" autoDeploy="true">
(2)添加到主機的hosts文件當中
(3)瀏覽器訪問
但很快就發現,使用ip無法正常訪問
(4)再次修改配置文件
<Engine name="Catalina" defaultHost="tomcat.xxhf.com">
(5)瀏覽器測試
注:這次域名和ip都可以正常訪問