nginx实现动静分离的方法示例

本文主要介绍了nginx实现动静分离的方法示例,具有一定的学习价值,具体如下

环境:

系统/主机名IP地址服务
Redhat8 :server1192.168.244.131nginx
Redhat8:server2192.168.244.133lnmp
Content7:node3192.168.244.142httpd

在三台主机上关闭防火墙

[root@server1 ~]# systemctl stop firewalld

[root@server1 ~]# systemctl disable firewalld

[root@server1 ~]# vim /etc/selinux/config

SELINUX=disabled

在server1上部署nginx

[root@server1 opt]# cat nginx.sh

#!/bin/bash

if [ $UID -ne 0 ];then

echo "Please use administrator account"

exit

fi

app_a=nginx-1.20.1.tar.gz

dir_a=/usr/local

dir_b=/var/log

dir_c=nginx-1.20.1

if [ ! -d $dir_b/nginx ];then

mkdir -p $dir_b/nginx

fi

chown -R nginx.nginx $dir_b/nginx

yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make

yum -y groups mark install 'Development Tools'

id nginx &>/dev/null

if [ $? -ne 0 ];then

useradd -r -M -s /sbin/nologin nginx

fi

tar xf bag/$app_a -C $dir_a

cd $dir_a/$dir_c

if [ ! -d $dir_a/nginx ];then

./configure \

--prefix=$dir_a/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=$dir_b/nginx/access.log \

--error-log-path=$dir_b/nginx/error.log && make && make install

fi

cd ..

if [ ! -f /etc/profile.d/nginx.sh ];then

echo "export PATH=$dir_a/nginx/sbin:\$PATH" > /etc/profile.d/nginx.sh

fi

cat > /usr/lib/systemd/system/nginx.service << EOF

[Unit]

Description=Nginx server daemon

Wants=sshd-keygen.target

[Service]

Type=forking

ExecStart=$dir_a/nginx/sbin/nginx

ExecStop=$dir_a/nginx/sbin/nginx -s stop

ExecReload=/bin/kill -HUP $MAINPID

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

systemctl enable --now nginx

查看端口

[root@server1 ~]# ss -antl

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 0.0.0.0:22 0.0.0.0:*

LISTEN 0 128 0.0.0.0:80 0.0.0.0:*

LISTEN 0 128 [::]:22 [::]:*

访问页面

在这里插入图片描述

在server上部署lnmp

部署nginx

[root@server2 lnmp]# cat install.sh

#!/bin/bash

if [ $UID -ne 0 ];then

echo "Please use administrator account"

exit

fi

app_a=nginx-1.20.1.tar.gz

dir_a=/usr/local

dir_b=/var/log

dir_c=nginx-1.20.1

if [ ! -d $dir_b/nginx ];then

mkdir -p $dir_b/nginx

fi

chown -R nginx.nginx $dir_b/nginx

yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make

yum -y groups mark install 'Development Tools'

id nginx &>/dev/null

if [ $? -ne 0 ];then

useradd -r -M -s /sbin/nologin nginx

fi

tar xf bag/$app_a -C $dir_a

cd $dir_a/$dir_c

if [ ! -d $dir_a/nginx ];then

./configure \

--prefix=$dir_a/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=$dir_b/nginx/access.log \

--error-log-path=$dir_b/nginx/error.log && make && make install

fi

cd ..

if [ ! -f /etc/profile.d/nginx.sh ];then

echo "export PATH=$dir_a/nginx/sbin:\$PATH" > /etc/profile.d/nginx.sh

fi

cat > /usr/lib/systemd/system/nginx.service << EOF

[Unit]

Description=Nginx server daemon

Wants=sshd-keygen.target

[Service]

Type=forking

ExecStart=$dir_a/nginx/sbin/nginx

ExecStop=$dir_a/nginx/sbin/nginx -s stop

ExecReload=/bin/kill -HUP $MAINPID

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

systemctl enable --now nginx

部署mysql

[root@server2 lnmp]# cat mysql.sh

#!/bin/bash

if [ $UID -ne 0 ];then

echo "root?"

exit

fi

dir_a=/usr/local

dir_b=/opt/data

app_a=mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz

app_b=mysql-5.7.34-linux-glibc2.12-x86_64

id mysql &>/dev/null

if [ $? -ne 0 ];then

useradd -r -M -s /sbin/nologin mysql

fi

yum -y install ncurses-compat-libs ncurses-devel openssl-devel openssl cmake mariadb-devel

if [ ! -d $dir_a/$app_b ];then

tar xf bag/$app_a -C $dir_a

fi

if [ ! -d $dir_a/mysql ];then

ln -sv $dir_a/$app_b $dir_a/mysql

fi

chown -R mysql:mysql $dir_a/mysql*

echo "export PATH=$dir_a/mysql/bin:\$PATH" > /etc/profile.d/mysql.sh

source /etc/profile.d/mysql.sh

if [ ! -d /$dir_b ];then

mkdir -p /$dir_b

chown -R mysql.mysql /$dir_b

fi

content=$(ls $dir_b | wc -l)

if [ $content -eq 0 ];then

mysqld --initialize-insecure --user mysql --datadir $dir_b

fi

cat > /etc/my.cnf <<EOF

[mysqld]

basedir = $dir_a/mysql

datadir = $dir_b

socket = /tmp/mysql.sock

port = 3306

pid-file = $dir_b/mysql.pid

user = mysql

skip-name-resolve

EOF

sed -ri "s#^(basedir=).*#\1$dir_a/mysql#g" $dir_a/mysql/support-files/mysql.server

sed -ri "s#^(datadir=).*#\1$dir_b#g" $dir_a/mysql/support-files/mysql.server

cat > /usr/lib/systemd/system/mysqld.service <<EOF

[Unit]

Description=mysql server daemon

After=network.target

[Service]

Type=forking

ExecStart=$dir_a/mysql/support-files/mysql.server start

ExecStop=$dir_a/mysql/support-files/mysql.server stop

ExecReload=/bin/kill -HUP $MAINPID

[Install]

WantedBy=multi-user.target

EOF

systemctl daemon-reload

systemctl enable --now mysqld

部署php

https://www.php.net/distributions/php-8.0.10.tar.xz

解压

[root@server2 ~]# tar -xf php-8.0.10.tar.gz -C /usr/local/

安装依赖包

[root@server2 ~]# wget http://mirrors.aliyun.com/repo/epel-7.repo

[root@server1 ~]# yum -y install 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 libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel mhash mhash-devel php-mysqlnd libsqlite3x-devel libzip-devel

[root@server2 ~]# 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@server2 ~]# cd /usr/local/php-8.0.10/

[root@server2 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

......

......

......

config.status: creating ext/phar/phar.phar.1

config.status: creating main/php_config.h

config.status: executing default commands

+--------------------------------------------------------------------+

| License: |

| This software is subject to the PHP License, available in this |

| distribution in the file LICENSE. By continuing this installation |

| process, you are bound by the terms of this license agreement. |

| If you do not agree with the terms of this license, you must abort |

| the installation process at this point. |

+--------------------------------------------------------------------+

Thank you for using PHP.

[root@server2 php-8.0.10]# make

.......

.......

.......

invertedregexiterator.inc

pharcommand.inc

phar.inc

Build complete.

Don't forget to run 'make test'.

[root@server2 php-8.0.10]# make install

......

......

/root/php-8.0.10/build/shtool install -c ext/phar/phar.phar /usr/local/php8/bin/phar.phar

ln -s -f phar.phar /usr/local/php8/bin/phar

Installing PDO headers: /usr/local/php8/include/php/ext/pdo/

配置php-fpm

[root@server2 php-8.0.10]# cp /etc/php.ini /opt/

[root@server2 php-8.0.10]# cp php.ini-production /etc/php.ini

cp: overwrite '/etc/php.ini'? y

[root@server2 php-8.0.10]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root@server2 php-8.0.10]# chmod +x /etc/init.d/php-fpm

[root@server2 php-8.0.10]# cd ..

[root@server2 local]# cd php8/

[root@server2 php8]# cd etc/

[root@server2 etc]# cp php-fpm.conf.default php-fpm.conf

[root@server2 etc]# cp php-fpm.d/www.conf.default php-fpm.d/www.conf

[root@server2 etc]# cd php-fpm.d

[root@server2 php-fpm.d]# ls

www.conf www.conf.default

配置环境变量

[root@server2 ~]# echo 'export PATH=/usr/local/php8/bin:$PATH' > /etc/profile.d/php.sh

[root@server2 ~]# cat /etc/profile.d/php.sh

export PATH=/usr/local/php8/bin:$PATH

[root@server2 ~]# source /etc/profile.d/php.sh

[root@server2 ~]# which php

/usr/local/php8/bin/php

编写service文件

[root@server2 ~]# cat /usr/lib/systemd/system/php-fpm.service

[Unit]

Description=php-fpm server daemon

After=network.target

[Service]

Type=forking

ExecStart=/etc/init.d/php-fpm start

ExecStop=/etc/init.d/php-fpm stop

ExecReload=/bin/kill -HUP $MAINPID

[Install]

[root@server2 ]# systemctl daemon-reload

启动php

[root@server2 ~]# systemctl start php-fpm

[root@server2 ~]# ss -antl

State Recv-Q Send-Q Local Address:Port Peer Address:Port

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 [::]:*

在nginx.conf里配置虚拟主机

[root@server2 ~]# cd /usr/local/nginx/html/

[root@server2 html]# ls

50x.html index.html

[root@server2 html]# vim index.php

[root@server2 html]# cat index.php

<?php

phpinfo();

?>

[root@server2 conf]# pwd

/usr/local/nginx/conf

[root@server2 conf]# vim nginx.conf

........

http {

include mime.types;

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"';

access_log logs/access.log main;

sendfile on;

......

location / {

root html;

index index.php index.html index.htm;

}

.....

location ~ \.php$ {

root 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@server2 conf]# nginx -s reload

访问

在这里插入图片描述

node3部署httpd

[root@node3 ~]# yum -y install httpd

启动

[root@node3 ~]# systemctl start httpd

[root@node3 ~]# ss -antl

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 *:22 *:*

LISTEN 0 100 127.0.0.1:25 *:*

LISTEN 0 128 :::80 :::*

LISTEN 0 128 :::22 :::*

LISTEN 0 100 ::1:25 :::*

访问

在这里插入图片描述

实现分离部署

在server1上的nginx.conf上配置

[root@server1 ~]# cat /usr/local/nginx/conf/nginx.conf

#user nobody;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

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"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

upstream cm { #静态资源地址

server 192.168.244.142;

}

upstream nm { #动态资源地址

server 192.168.244.133;

}

server {

listen 80;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

proxy_pass http://cm; #指向静态

}

#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;

}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

location ~ \.php$ { #指向动态

proxy_pass http://nm;

}

[root@server1 ~]# nginx -s reload

访问 192.168.244.131

在这里插入图片描述

在访问 192.168.244.131/index.php

在这里插入图片描述

到此这篇关于nginx实现动静分离的方法示例的文章就介绍到这了,更多相关nginx 动静分离内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

以上是 nginx实现动静分离的方法示例 的全部内容, 来源链接: utcz.com/p/253379.html

回到顶部