前情提要
问:如何通过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都可以正常访问