Nginx实现动静分离

Nginx实现动静分离

简介

反向代理与负载均衡
nginx通常被用作后端服务器的反向代理,这样就可以很方便的实现动静分离以及负载均衡,从而大大提高服务器的处理能力。

nginx实现动静分离,其实就是在反向代理的时候,如果是静态资源,就直接从nginx发布的路径去读取,而不需要从后台服务器获取了。

但是要注意,这种情况下需要保证后端跟前端的程序保持一致,可以使用Rsync做服务端自动同步或者使用NFS、MFS分布式共享存储。

Http Proxy模块,功能很多,最常用的是proxy_passproxy_cache

如果要使用proxy_cache,需要集成第三方的ngx_cache_purge模块,用来清除指定的URL缓存。这个集成需要在安装nginx的时候去做,如:

./configure --add-module=…/ngx_cache_purge-1.0 …

环境说明

系统IP服务
CentOS8调度器 DR192.168.101.210Nginx
CentOS8 动态页面处理 Dynamic(动态)192.168.101.120LNMP
CentOS8 静态页面处理 Static(静态)192.168.101.200httpd

Dynamic部署LNMP

准备安装包

[root@Dynamic ~]# cd /usr/src/
[root@Dynamic src]# ls
debug    mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz  php-8.0.10.tar.gz
kernels  nginx-1.20.1.tar.gz

解压

[root@Dynamic src]# tar xf nginx-1.20.1.tar.gz -C /usr/local/
[root@Dynamic src]# tar xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@Dynamic src]# tar xf php-8.0.10.tar.gz -C /usr/local/

关闭防火墙

[root@Dynamic ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@Dynamic ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux
[root@Dynamic ~]# setenforce 0

nginx安装

创建系统用户nginx

[root@Dynamic ~]# useradd -r -M -s /sbin/nologin nginx

安装依赖环境

[root@Dynamic ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
[root@Dynamic ~]# yum -y groups mark install 'Development Tools'

创建日志存放目录

[root@Dynamic ~]# mkdir -p /var/log/nginx
[root@Dynamic ~]# chown -R nginx.nginx /var/log/nginx

编译安装

[root@Dynamic ~]# mv /usr/local/nginx-1.20.1 /usr/local/nginx
[root@Dynamic ~]# cd /usr/local/nginx
[root@Dynamic nginx]# ./configure \
     --prefix=/usr/local/nginx \
     --user=nginx \
     --group=nginx \
     --with-debug \
     --with-http_ssl_module \
     --with-http_realip_module \
     --with-http_image_filter_module \
     --with-http_gunzip_module \
     --with-http_gzip_static_module \
     --with-http_stub_status_module \
     --http-log-path=/var/log/nginx/access.log \
     --error-log-path=/var/log/nginx/error.log  && make && make install

配置环境变量

[root@Dynamic ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@Dynamic ~]# . /etc/profile.d/nginx.sh

mysql安装

创建MySQL用户

[root@Dynamic ~]# useradd -r -M -s /sbin/nologin  mysql

下载依赖包

[root@Dynamic ~]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel ncurses-compat-libs

创建软连接

[root@Dynamic local]# ln -sv mysql-5.7.34-linux-glibc2.12-x86_64/ mysql
'mysql' -> 'mysql-5.7.34-linux-glibc2.12-x86_64/'

修改目录/usr/local/mysql的属主属组

[root@Dynamic local]# chown -R mysql.mysql /usr/local/mysql

添加环境变量

[root@Dynamic local]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@Dynamic local]# . /etc/profile.d/mysql.sh 
[root@Dynamic local]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

创建数据存放目录

[root@Dynamic ~]# mkdir /opt/data
[root@Dynamic ~]# chown -R mysql.mysql /opt/data/

初始化数据存放目录

[root@Dynamic local]# mysqld --initialize-insecure --user mysql --datadir /opt/data
2021-10-26T08:44:19.180331Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-26T08:44:21.232317Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-10-26T08:44:21.505523Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-10-26T08:44:21.586577Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: ea22dfe8-3638-11ec-b1de-000c29e0e7fa.
2021-10-26T08:44:21.587932Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-10-26T08:44:22.801564Z 0 [Warning] CA certificate ca.pem is self signed.
2021-10-26T08:44:23.031816Z 1 [Warning] root@Dynamic is created with an empty password ! Please consider switching off the --initialize-insecure option.

配置mysql

[root@Dynamic ~]# ln -sv /usr/local/mysql/include/ /usr/local/include/mysql
'/usr/local/include/mysql' -> '/usr/local/mysql/include/'
[root@Dynamic ~]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
[root@Dynamic ~]# ldconfig

生成配置文件

[root@Dynamic ~]# vim /etc/my.cnf
[root@Dynamic ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve

配置服务启动脚本

[root@Dynamic ~]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@Dynamic ~]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /etc/init.d/mysqld
[root@Dynamic ~]# sed -ri 's#^(datadir=).*#\1/opt/data#g' /etc/init.d/mysqld

启动

[root@Dynamic ~]#  service mysqld start
Starting MySQL.Logging to '/opt/data/Dynamic.localdomain.err'.
. SUCCESS! 

PHP安装

下载依赖包

[root@Dynamic ~]# yum -y install sqlite-devel libzip-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel pcre-devel freetype freetype-devel gmp gmp-devel readline readline-devel libxslt libxslt-devel
[root@Dynamic ~]# yum -y install http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-2.el8.x86_64.rpm

编译安装

[root@Dynamic]# cd /usr/local/php-8.0.10/
[root@Dynamic php-8.0.10]#  ./configure --prefix=/usr/local/php8  \
    --with-config-file-path=/etc \
    --enable-fpm \
    --disable-debug \
    --disable-rpath \
    --enable-shared \
    --enable-soap \
    --with-openssl \
    --enable-bcmath \
    --with-iconv \
    --with-bz2 \
    --enable-calendar \
    --with-curl \
    --enable-exif  \
    --enable-ftp \
    --enable-gd \
    --with-jpeg \
    --with-zlib-dir \
    --with-freetype \
    --with-gettext \
    --enable-mbstring \
    --enable-pdo \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    --with-readline \
    --enable-shmop \
    --enable-simplexml \
    --enable-sockets \
    --with-zip \
    --enable-mysqlnd-compression-support \
    --with-pear \
    --enable-pcntl \
    --enable-posix
[root@Dynamic php-8.0.10]# make && make install

安装后配置

[root@Dynamic php-8.0.10]# echo 'export PATH=/usr/local/php8/bin:$PATH' > /etc/profile.d/php.sh
[root@Dynamic php-8.0.10]# source /etc/profile.d/php.sh 
[root@Dynamic php-8.0.10]# which php
/usr/local/php8/bin/php
[root@Dynamic ~]# php -v
PHP 8.0.10 (cli) (built: Oct 26 2021 05:08:01) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.10, Copyright (c) Zend Technologies

配置php-fpm

[root@Dynamic php-8.0.10]# cp -f /usr/local/php-8.0.10/php.ini-production /etc/php.ini
[root@Dynamic php-8.0.10]# cp /usr/local/php-8.0.10/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm -f
[root@Dynamic php-8.0.10]# chmod +x /etc/init.d/php-fpm 
[root@Dynamic php-8.0.10]# cp -f /usr/local/php8/etc/php-fpm.conf.default /usr/local/php8/etc/php-fpm.conf
[root@Dynamic php-8.0.10]# cp -f /usr/local/php8/etc/php-fpm.d/www.conf.default /usr/local/php8/etc/php-fpm.d/www.conf

启动

[root@Dynamic ~]# service php-fpm start
Starting php-fpm  done
[root@Dynamic ~]# ss -antl
State  Recv-Q Send-Q  Local Address:Port   Peer Address:Port Process                                                      
LISTEN 0      128         127.0.0.1:9000        0.0.0.0:*                                                                 
LISTEN 0      128           0.0.0.0:22          0.0.0.0:*                                                                 
LISTEN 0      80                  *:3306              *:*                                                                 
LISTEN 0      128              [::]:22             [::]:*

nginx配置

在 location 的 index 项中添加 index.php

删除 location ~ .php$ 大括号前的 #,并修改以下配置项:
修改 root 项为您的网站根目录,即 location 中的 root 项,本文以 /usr/local/nginx/html; 为例。

修改 fastcgi_pass 项为 unix:/run/php-fpm/www.sock;,Nginx 通过 UNIX 套接字与 PHP-FPM 建立联系,该配置与 /etc/php-fpm.d/www.conf 文件内的 listen 配置一致。

将 fastcgi_param SCRIPT_FILENAME 后的 /scripts$fastcgi_script_name; 替换为 $document_root $fastcgi_script_name;。

[root@Dynamic ~]# vim /usr/local/nginx/conf/nginx.conf
·····此处省略·····
 location / {
            root   html;
            index  index.php index.html index.htm;  ##添加index。php
        }
·····此处省略·····

·····此处省略·····
        location ~ \.php$ {
            root           /usr/local/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root $fastcgi_script_name;
            include        fastcgi_params;
        }
·····此处省略·····

[root@Dynamic ~]# cd /usr/local/nginx/html/
[root@Dynamic html]# echo "<?php phpinfo(); ?>" >> index.php
[root@Dynamic html]# cat index.php 
<?php phpinfo(); ?>

php配置

[root@Dynamic ~]# vim /usr/local/php8/etc/php-fpm.d/www.conf
·····此处省略·····
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx   ##改为nginx用户
group = nginx   ##改为nginx组
·····此处省略······

重启所有服务

[root@Dynamic ~]# nginx -s stop
[root@Dynamic ~]# nginx 
[root@Dynamic ~]# service mysqld restart 
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 
[root@Dynamic ~]# service php-fpm restart 
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[root@Dynamic ~]# ss -antl
State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port  Process  
LISTEN  0       128          127.0.0.1:9000        0.0.0.0:*              
LISTEN  0       128            0.0.0.0:80          0.0.0.0:*              
LISTEN  0       128            0.0.0.0:22          0.0.0.0:*              
LISTEN  0       80                   *:3306              *:*              
LISTEN  0       128               [::]:22             [::]:*

请添加图片描述

Static部署 httpd

# 安装***httpd***  
# 下载工具包   
[root@Static soft]# yum groups mark install 'Development Tools'

# 创建用户
[root@Static soft]# useradd -r -M -s /sbin/nologin apache

# 安装依赖包
[root@Static soft]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make wget

[root@Static ~]# mkdir /usr/src/soft
[root@Static ~]# cd /usr/src/soft/

# 下载官网,apache.org

[root@Static soft]# ls
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.48.tar.gz

# 解压
[root@Static soft]# tar xf apr-1.7.0.tar.gz -C /usr/local/
[root@Static soft]# tar xf apr-util-1.6.1.tar.gz  -C /usr/local/
[root@Static soft]# tar xf httpd-2.4.48.tar.gz  -C /usr/local/

# 编译安装apr
[root@Static soft]# cd /usr/local/apr-1.7.0/
[root@Static apr-1.7.0]# vi configure
......
31879     trap "$RM \"$cfgfile\"; exit 1" 1 2 15
31880    #  $RM "$cfgfile"  # 注释掉或删除
......
[root@Static apr-1.7.0]# ./configure --prefix=/usr/local/apr
......
[root@Static apr-1.7.0]# make && make install
......

# 编译安装apr-util
[root@Static apr-1.7.0]# cd ../apr-util-1.6.1/
[root@Static apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
......
[root@Static apr-util-1.6.1]# make && make install
.......

# 编译安装httpd
[root@Static apr-util-1.6.1]# cd ../httpd-2.4.48/
[root@Static httpd-2.4.48]# ./configure --prefix=/usr/local/apache \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
......
Server Version: 2.4.48
    Install prefix: /usr/local/apache
    C compiler:     gcc
    CFLAGS:          -g -O2 -pthread  
    CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE  
    LDFLAGS:           
    LIBS:             
    C preprocessor: gcc -E

[root@Static httpd-2.4.48]# make && make install
.......

# 配置环境变量
[root@Static httpd-2.4.48]# echo "export PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/httpd.sh
[root@Static httpd-2.4.48]# bash
[root@Static httpd-2.4.48]# which httpd
/usr/local/apache/bin/httpd

# 取消配置文件中ServerName前面的注释
#ServerName提供服务器用于标识自身的名称和端口。
#这通常可以自动确定,但我们建议您指定
#这是为了防止启动过程中出现问题。
#如果您的主机没有注册的DNS名称,请在此处输入其IP地址。
[root@Static httpd-2.4.48]# sed -i 's/^#ServerName www.example.com:80/ServerName www.example.com:80/' /usr/local/apache/conf/httpd.conf

# 设置开机自启
[root@Static httpd-2.4.48]# cd /usr/lib/systemd/system/
[root@Static system]# cp sshd.service httpd.service
[root@Static system]# vi httpd.service
[Unit]
Description=httpd server daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start
ExecStop=/usr/local/apache/bin/apachectl stop
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target

[root@Static system]# systemctl daemon-reload
[root@Static system]# systemctl start httpd
[root@Static system]# ss -antl
State     Recv-Q    Send-Q       Local Address:Port         Peer Address:Port    Process    
LISTEN    0         128                0.0.0.0:22                0.0.0.0:*                  
LISTEN    0         128                   [::]:22                   [::]:*                  
LISTEN    0         128                      *:80(httpd默认端口)       

请添加图片描述

DR上部署nginx

创建系统用户nginx

[root@DR ~]# useradd -r -M -s /sbin/nologin nginx

安装依赖环境

[root@DR ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
[root@DR ~]# yum -y groups mark install 'Development Tools'

创建日志存放目录

[root@DR ~]# mkdir -p /var/log/nginx
[root@DR ~]# chown -R nginx.nginx /var/log/nginx

下载nginx

[root@DR ~]# cd /usr/src/
[root@DR src]# wget http://nginx.org/download/nginx-1.12.0.tar.gz

编译安装

[root@DR src]# ls
debug  kernels  nginx-1.12.0.tar.gz
[root@DR src]# tar xf nginx-1.12.0.tar.gz
[root@DR src]# cd nginx-1.12.0
[root@DR nginx-1.12.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log

[root@DR nginx-1.12.0]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install

请添加图片描述

配置动静分离

[root@DR ~]# vim /usr/local/nginx/conf/nginx.conf

        upstream Dynamic {
                server 192.168.101.120     # 在server段上添加
        }
        upstream Static {
                server 192.168.101.200
        }
#location / {
        #    root   html;
        #    index  index.html index.html  #将这段添加注释
        ;	
        #}


	location ~ \.php$ {
                proxy_pass   http://Dynamic;	# 在server段添加
        }
        location / {
                proxy_pass http://Static;
        }
[root@DR ~]# nginx -s reload

测试效果
当访问根目录的时候默认是跳到静态的httpd上
请添加图片描述

当访问动态资源时就自动跳到Dynamic上
请添加图片描述

配置负载均衡

DR上

[root@DR ~]# vim /usr/local/nginx/conf/nginx.conf
 upstream LJT {
                server 192.168.101.120;
                server 192.168.101.200;				# 在server段上面添加
        }
location / {
                proxy_pass http://LJT;  				# 在server段内添加
        }


测试效果
请添加图片描述

刷新,每刷新一次就在Dynamic和Static上跳转请添加图片描述
也可设置权重,让高性能主机的多处理任务

[root@DR ~]# vim /usr/local/nginx/conf/nginx.conf
 upstream LJT {
                server 192.168.101.120 weight=3;  # 设置权重就会多处理任务
                server 192.168.101.200;				# 在server段上面添加
        }
location / {
                proxy_pass http://LJT;  				# 在server段内添加
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值