Nginx+Apache:动静分离

本文介绍了Nginx的反向代理原理及其在动静分离中的应用。通过proxy_pass指令,Nginx将动态请求转发给Apache处理,静态资源则直接由Nginx响应。详细阐述了在两台服务器上配置LAMP环境和Nginx,实现动静分离的步骤,以提高网站性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反向代理原理
  • Nginx不仅能作为Web服务器,还具有反向代理、负载均衡和缓存的功能

  • Nginx通过proxy模块实现将客户端的请求代理至上游服务器,此时nginx与上游服务器的连接是通过http协议进行的

  • Nginx在实现反向代理功能时的最重要指令为 proxy_pass,它能够并能够根据URI、客户端参数或其它的处理逻辑将用户请求调度至上游服务器

配置Nginx实现动静分离

本案例根据企业需要,将配置Nginx实现动静分离,对 php页面的请求转发给LAMP处理,而静态页面交给Nginx处理,以实现动静分离。

架构如图所示:

在这里插入图片描述

配置步骤

  • 架设并调试后端LAMP环境

  • 安装配置Nginx处理静态页面请求,在server {};段加入
    在这里插入图片描述

准备两台服务器:

7-2 LAMP 192.168.17.151

7-4 Nginx 192.168.17.130

首先,7-2 我们先来搭建LAMP

#安装Apache并开启服务

[root@LAMP ~]# yum install -y httpd
[root@LAMP ~]# systemctl start httpd.service 

#防火墙的配置,直接关闭防火墙也可以

firewall-cmd --permanent --zone=public --add-service=http
success

firewall-cmd --permanent --zone=public --add-service=https
success

firewall-cmd --reload
success

[root@LAMP ~]# systemctl stop firewalld.service 
[root@LAMP ~]# setenforce 0

#这里我们不安装mysql,安装mariadb并开启

[root@LAMP ~]# yum install mariadb mariadb-server mariadb-libs mariadb-devel -y

[root@LAMP ~]# systemctl start mariadb

#开启mysql一键式设定

[root@LAMP ~]# mysql_secure_installation
Enter current password for root (enter for none):                 //直接回车
Set root password? [Y/n] 										//Y,设置密码
Remove anonymous users? [Y/n] 									//n
Disallow root login remotely? [Y/n] 							//n
Remove test database and access to it? [Y/n] 					//n
Reload privilege tables now? [Y/n] 								//y,重载

#安装php

[root@LAMP ~]# yum -y install php

#建立php和mysql关联

[root@LAMP ~]# yum install php-mysql -y

#安装php插件

[root@LAMP ~]# yum install -y php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel php-bcmath

#建立php站点首页

[root@LAMP ~]# cd /var/www/html 
[root@LAMP html]# vim index. php
<?php
phpinfo() ;
?>

#服务全部启动,访问网页

[root@LAMP html]# systemctl restart httpd.service 
[root@LAMP html]# systemctl restart mariadb.service

在这里插入图片描述

7-4服务器编译安装Nginx

#挂载并解压Nginx安装包

[root@nginx ~]# mkdir /abc
[root@nginx ~]# mount.cifs //192.168.17.1/LNMP /abc
Password for root@//192.168.17.1/LNMP:  
[root@nginx ~]# cd /abc
[root@nginx abc]# ls
Discuz_X3.4_SC_UTF8.zip    php-5.6.11.tar.bz2
error.png                  php-7.1.10.tar.bz2
mysql-boost-5.7.20.tar.gz  php-7.1.20.tar.bz2
ncurses-5.6.tar.gz         php-7.1.20.tar.gz
nginx-1.12.2.tar.gz        zend-loader-php5.6-linux-x86_64_update1.tar.gz
nz.jpg
[root@nginx abc]# tar zxvf nginx-1.12.2.tar.gz -C /opt

#安装语言环境依赖包

[root@nginx abc]# yum install -y gcc gcc-c++ make pcre* zlib-devel

#创建程序用户

[root@nginx abc]# useradd -M -s /sbin/nologin nginx

#配置编译并安装

[root@nginx nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

#优化路径,便于系统识别命令

[root@nginx nginx-1.12.2]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

#制作管理脚本,便于service管理

[root@nginx nginx-1.12.2]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
     start)
	$PROG
	;;
    stop)
	kill -s QUIT $(cat $PIDF)
	;;
    restart) 
	$0 stop
	$0 start
	;;
    reload)
	kill -s HUP $(cat $PIDF)
	;;
    *)
	echo "Usage: $0 {start |stoplrestart |reload}"
	exit 1
esac
exit 0
 
[root@nginx nginx-1.12.2]# chmod +x /etc/init.d/nginx             //添加执行权限
[root@nginx nginx-1.12.2]# chkconfig --add nginx                 //添加系统识别命令
[root@nginx nginx-1.12.2]# chkconfig --level 35 nginx on         //开机自启

#修改nginx配置文件,打开反向代理模块,修改地址为Apahce地址, 意思是动态请求重定向指到LAMP地址

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

#重启服务后访问网站

在这里插入图片描述

在这里插入图片描述

可以看到访问的ip都是192.168.17.130,静态页面由Nginx自己处理,动态页面由Nginx转交给Apache处理

ApacheNginx 实现动静分离是一种常见的优化手段,能够提高网站性能、减轻服务器压力并改善用户体验。以下是具体的实现原理及步骤: ### 动静分离的基本思路 动(动态内容)是指需要由后端程序生成的内容(如PHP脚本),而静(静态资源)则是指无需动态生成的文件(如HTML页面、图片、CSS样式表等)。通过配置将这两种请求分开处理,可以让Nginx专注于处理静态资源,而把动态请求交给Apache。 --- #### 具体实现方案 **1. 配置Nginx作为反向代理** - **功能定位**:Nginx负责所有的用户访问入口,并区分出静态动态请求。 - 如果是静态资源,则直接返回;如果是动态请求,则转发给后台的Apache服务去处理。 ```nginx server { listen 80; server_name yourdomain.com; # 定义静态资源路径 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { root /var/www/html/static; # 设置静态资源目录 expires 30d; # 缓存时间设置为30天 } # 转发所有非静态资源到Apache (localhost:8080) location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` **2. 启用Apache监听指定端口** - 确保 Apache 正常运行并在特定端口上等待来自 Nginx 的请求,默认可以使用 `8080`。 - 修改 Apache 配置使其仅关注于 PHP 或其他动态语言支持的服务。 ```apacheconf <VirtualHost *:8080> ServerName yourdomain.com DocumentRoot "/var/www/html" <Directory "/var/www/html"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> ``` **3. 测试与调整** 完成上述两步之后重启两个Web服务器(Nginx+Apache),检查是否正常工作: ```bash sudo systemctl restart nginx apache2 ``` 最后可通过浏览器测试验证各种类型的URL响应情况是否满足预期效果! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值