nginx服务器实验

1.实验要求

1)在Nginx服务器上搭建LNMP服务,并且能够对外提供Discuz论坛服务。
在Web1、Web2服务器上搭建Tomcat 服务。

2)为nginx服务配置虚拟主机,新增两个域名 www.kgc.com 和 www.benet.com,使用http://www.kgc.com/index.php可访问上一题的Discuz论坛页面。
使用http://www.benet.com则访问/var/www/html目录中的index.html文件的内容,内容自定义。

3)对基于www.benet.com域名的虚拟机主机的nginx服务调优:隐藏nginx版本号,缓存静态图片网页时间为1天,设置防盗链功能。

4)网关服务器搭建NFS服务,提供的文件系统使用LVM类型,共享目录名称为/opt/nfs;要求根据日期对Discuz论坛服务的访问日志进行日志分割,要求每天生成一份日志文件,保存到NFS服务共享的目录内

5)要求配置location匹配请求地址http://www.kgc.com/test/XXXX,使用户访问该路径下的文件时返回/var/share/nginx/html/目录下的文件内容。
要求使用rewrite将使用域名www.benet.com 请求以 .php 结尾的访问都跳转到域名www.kgc.com上,而且后面的参数保持不变,比如访问http://www.benet.com/bbs/index.php跳转到http://www.kgc.com/bbs/index.php。

6)在Nginx服务器上对基于www.benet.com域名的虚拟机主机设置动静分离由nginx提供静态页面服务,将对 .jsp文件的动态页面请求转发到Tomcat 服务器处理,并实现负载均衡

7)在网关服务器上设置SNAT/DNAT,使client使用网关服务器的ens36接口的IP地址访问也可实现上一题的效果。

注:IP地址自己规划

要求1

nginx搭建LNMP


#安装nginx
yum -y install epel-release
yum -y install nginx#安装mysql:
tee /etc/yum.repos.d/mysql.repo <<EOF
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
enabled=1
gpgcheck=0
EOFyum clean all &&yum makecacheyum -y install mysql-community-server
systemctl start mysqld#进入mysql数据库,第一次密码是默认密码
mysql-uroot -p 
grep "password" /var/log/mysql.log
2025-05-09T08:30:52.285182Z 1 [Note] A temporary password is generated for r                                                                                                          oot@localhost: wUtlmd-q;6<V
mysql -uroot -p'wUtlmd-q;6<V'#每个密码都是不一样的,需要自己查看自己的默认密码#修改数据库密码为“abc123”
set global validate_password_policy=0;
set global validate_password_length=1;
alter user root@'localhost' identified by 'abc123';
#使用ctrl+d#编译安装php,需要php-7.1.10.tar.bz2压缩包:
#安装环境
yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel#解压安装包,编译并安装
tar xf php-7.1.10.tar.bz2
cd php-7.1.10
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zipmake&&make install#将php写入PATH
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/#调整配置文件
cp /opt/php-7.1.10/php.ini-development  /usr/local/php/lib/php.ini
vim /usr/local/php/lib/php.ini
#939行
date.timezone = Asia/Shanghai
#1170行
mysqli.default_socket = /var/lib/mysql/mysql.sockcd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d
cp www.conf.default www.conf
cp /opt/php-7.1.10/sapi/fpm/php-fpm.service   /usr/lib/systemd/system/php-fpm.servicesystemctl daemon-reload
systemctl start php-fpm.service
systemctl status nginx mysqld php-fpmvim /etc/nginx/nignx.conf#server模块下
index index.html index.htm index.php;
....
location ~ \.php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
include        fastcgi_params;mysql -uroot -p '密码'
CREATE DATABASE bbs;
set global validate_password_policy=0;
set global validate_password_length=1;
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;
show databases;安装论坛,准备Discuz_X3.4_SC_UTF8.zip压缩包:
unaip  Discuz_X3.4_SC_UTF8.zip
cp -a dir_SC_UTF8/upload  /usr/share/nginx/html/bbscd /usr/share/nginx/html/bbs
chown -R nobody ./config/
chown -R nobody ./data/
chown -R nobody ./uc_client/
chown -R nobody ./uc_server/访问http://IP地址/bbs  

#创建数据库页面
数据库用户名 :bbsuser (mysql数据库里设定)
数据库密码:admin123(mysql数据库里设定)
...
管理员密码:abc123
二次确认:abc123

搭建tomcat

准备jdk-8u201-linux-x64.rpm;apache-tomcat-9.0.16.tar.gz2个压缩包
tar xf jdk-8u201-linux-x64.rpm -C /usr/local/
tar xf apache-tomcat-9.0.16.tar.gz -C /usr/local/cd /usr/local/
ln -s /usr/local/jdk1.8.0_291/ ./jdk
ln -s /usr/local/apache-tomcat-9.0.16/ ./tomcat
vim /etc/profile.d/jdk.shexport JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/libsource /etc/profile.d/jdk.shtomcat安装:
useradd -M -s /sbin/nologin tomcat
chown -R tomcat:tomcat /usr/local/apache-tomcat-9.0.16/
vim /usr/lib/systemd/system/tomcat.service[Unit]
Description=Tomcat
After=syslog.target network.target[Service]
Type=forking
Environment=PATH=$PATH:$JAVA_HOME/bin
Environment=CLASSPATH=/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/jdk/bin
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl start tomcat
systemctl status tomcat测试:
访问此IP地址的8080端口

要求2

vim /etc/nginx/nginx.conf
#添加到server模块下
include /etc/nginx/conf.d/*.confmkdir -p /etc/nginx/conf.d/
touch kgc.conf benet.conf#定义www.kgc.com
vim /etc/nginx/conf.d/kgc.conf server{
listen 80;
server_name www.kgc.com;
root /usr/share/nginx/html;
index index.html index.htm index.php;
location = /index.php {
rewrite .* http://www.kgc.com/bbs/;
}
location ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;include        fastcgi_params;}
}#定义www.benet.com域名
vim /etc/nginx/conf.d/benet.confserver{
listen 80;
server_name www.benet.com;
root /var/www/html;
}vim /var/www/html/index.htmlni hao zhe li shi benetnginx -t &&nginx -s reload

如果想使用真机浏览器访问www.benet.com或者www.kgc.com:

访问结果:

要求3

vim /etc/nginx/conf.d/benet.conf#http模块下
server_tokens off;
expires 1d;
server{
listen 80;
server_name www.benet.com;
root /var/www/html;
location ~* \.(jpg|gif|swf|jpeg|bmp)$ {
root  /var/www/html;
valid_referers none blocked *.kgc.com kgc.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.benet.com/error.jpg;
#return   403;
}
}
location = /error.jpg {
root /var/www/html;
}
}cd /var/www/html
创建a.jpg;error.jpg文件可以使用其他带有nginx服务器的设备
vim /.../nginx/html/index.html
<img src="http://被盗图的IP地址/a.jpg"/>

访问www.benet.com/a.jpg,再访问新的nginx设备

改变配置文件为返回403状态码。

要求4

网关服务器:
vgcreate lvm /dev/sdb /dev/sdc /dev/sdd
lvcreate -n lvm -L 35G lvm
mkfs.xfs /dev/lvm/lvm
mkdir /opt/lvm
mount /dev/lvm/lvm /opt/lvmvim /etc/exports
/opt/lvm *(rw)exportfs -r
exportfs -v
chmod 777 /opt/lvm 
systemctl restart nfs nginx服务器:mkdir /opt/lvm
mount 192.168.174.190:/opt/lvm /opt/lvm
vim access.sh#制作脚本#!/bin/bash
y=`date | awk '{print $2}'`
mkdir /opt/lvm/$y &> /dev/null
if [ -e /var/log/nginx/access.log ]
thenmv /var/log/nginx/access.log /opt/lvm/${y}/`date +%F`-access.log &> /dev/nulltouch /var/log/nginx/access.logkill -USR1 `cat /run/nginx.pid`
ficrontab -e#制作定时任务,可以先制作一个每2分钟就执行的定时任务进行实验
55 23 * * * /usr/bin/bash /opt/access.sh
crontab -l#查看定时任务

要求5

vim /etc/nginx/conf.d/kgc.conflocation /test {
alias /var/share/nginx/html/;
}mkdir -p /var/share/nginx/html
vim /var/share/nginx/html/a.html
{自定义}nginx -s reload

vim /etc/nginx/conf.d/benet.conf#server模块下
location ~* \.php$ {
rewrite /(.*)  http://www.kgc.com/$1;
}nginx -s reload

访问:

得到:

要求6

nginx服务器上:
vim /etc/nginx/conf.d/benet.conf
#http模块下
upstream web {
server 192.168.174.103;
server 192.168.174.102;
}
...
#server模块下
location ~* \.txt$ {
proxy_pass http://web/;
}nginx -s reloadtomcat服务器上:
vim /usr/share/nginx/html/1.txt
{自定义}

要求7

配置网关服务双网卡:

vim /etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="fd7d808c-0292-4c69-93e5-b301eaa9e1c7"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.174.190
NETMASK=255.255.255.0
GATEWAY=192.168.174.190
DNS1=114.114.114.114vim /etc/sysconfig/network-scripts/ifcfg-ens36TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens36"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.100
DNS1=114.114.114.114

配置client服务器(仅本地):

vim /etc/sysconfig/network-scripts/ifcfg-esn33TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=e50fd064-465c-4451-81f8-4d9f81ee27d3
DEVICE=ens33
NBOOT=yes
IPADDR=12.0.0.105
NETMASK=255.255.255.0
GATEWAY=12.0.0.100
DNS1=114.114.114.114

网关服务器配置:

sysctl -a | grep ip_forward#查看路由转发是否打开vim /etc/sysctl.confnet.ipv4.ip_forward = 1sysctl -piptables -t nat -A POSTROUTING -s 12.0.0.0/24 -j SNAT --to 192.168.174.190

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/83638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 与 RabbitMQ 的深度集成实践(一)

引言 ** 在当今的分布式系统架构中&#xff0c;随着业务复杂度的不断提升以及系统规模的持续扩张&#xff0c;如何实现系统组件之间高效、可靠的通信成为了关键问题。消息队列作为一种重要的中间件技术&#xff0c;应运而生并发挥着举足轻重的作用。 消息队列的核心价值在于其…

c++多线程debug

debug demo 命令行查看 ps -eLf|grep cam_det //查看当前运行的轻量级进程 ps -aux | grep 执行文件 //查看当前运行的进程 ps -aL | grep 执行文件 //查看当前运行的轻量级进程 pstree -p 主线程ID //查看主线程和新线程的关系 查看线程栈结构 pstack 线程ID 步骤&…

10.7 LangChain v0.3架构大升级:模块化设计+多阶段混合检索,开发效率飙升3倍!

LangChain v0.3 技术生态与未来发展 关键词:LangChain Chains, Agents 架构, Retrieval Strategy, LangGraph, 模块化设计 3. LangChain 项目:Chains, Agents, Retrieval Strategy LangChain v0.3 通过 Chains-Agents-Retrieval 三位一体的技术栈,构建起完整的大模型应用开…

分布式 ID 生成的五种方法:优缺点与适用场景

0.简介 在分布式系统中&#xff0c;生成全局唯一的id是一个常见的需求。由于分布式系统的特性&#xff08;多节点&#xff0c;网络分区&#xff0c;时钟不同步等&#xff09;&#xff0c;传统的单机ID生成方式不再适用&#xff0c;所以一些分布式生成方式应运而生&#xff0c;…

基于单片机路灯自动控制仪仿真设计

标题:基于单片机路灯自动控制仪仿真设计 内容:1.摘要 本设计旨在解决传统路灯控制方式效率低、能耗大的问题&#xff0c;开展了基于单片机的路灯自动控制仪仿真设计。采用单片机作为核心控制单元&#xff0c;结合光照传感器、时钟模块等硬件&#xff0c;运用相关软件进行编程和…

计算机网络-MPLS VPN基础概念

前面几篇文章我们学习了MPLS的标签转发原理&#xff0c;有静态标签分发和LDP动态标签协议&#xff0c;可以实现LSR设备基于标签实现数据高效转发。现在开始学习MPLS在企业实际应用的场景-MPLS VPN。 一、MPLS VPN概念 MPLS&#xff08;多协议标签交换&#xff09;位于TCP/IP协…

LWIP的Socket接口

Socket接口简介 类似于文件操作的一种网络连接接口&#xff0c;通常将其称之为“套接字”。lwIP的Socket接口兼容BSD Socket接口&#xff0c;但只实现完整Socket的部分功能 netconn是对RAW的封装 Socket是对netconn的封装 SOCKET结构体 struct sockaddr { u8_t sa_len; /* 长…

windows 安装gdal实现png转tif,以及栅格拼接

windows 安装gdal实现png转tif&#xff0c;以及栅格拼接 一、安装gdal 网上有很多安装gdal的方法&#xff0c;此处通过osgeo4w安装gdal 1.下载osgeo4w 下载地址 https://trac.osgeo.org/osgeo4w/ 2、安装osgeo4w exe文件安装&#xff0c;前面部分很简单&#xff0c;就不再…

Node.js 源码概览

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;它的源码结构相当庞大且复杂。下面我将为你讲解 Node.js 源码的主要结构和关键组成部分。 源码结构 Node.js 的主要源码目录结构如下&#xff1a; node/ ├── lib/ # JavaScript 核心模…

Linux :线程 【生产者消费者模型】

Linux &#xff1a;线程 【生产者消费者模型与信号量】 &#xff08;一&#xff09;生产消费模型1、生产消费模式概念2、生产者消费者之间的关系3、生产者消费者模型优点 &#xff08;二&#xff09;基于BlockingQueue的生产者消费者模型1、基于阻塞队列模型2、模拟实现基于阻塞…

mac本地docker镜像上传指定虚拟机

在Mac本地将Docker镜像上传至指定虚拟机的完整步骤 1. 在Mac本地保存Docker镜像为文件 通过docker save命令将镜像打包为.tar文件&#xff0c;便于传输至虚拟机。 # 示例&#xff1a;保存名为"my_image"的镜像到当前目录 docker save -o my_image.tar my_image:ta…

C++跨平台开发经验与解决方案

在当今软件开发领域&#xff0c;跨平台开发已成为一个重要的需求。C作为一种强大的系统级编程语言&#xff0c;在跨平台开发中扮演着重要角色。本文将分享在实际项目中的跨平台开发经验和解决方案。 1. 构建系统选择 CMake的优势 跨平台兼容性好 支持多种编译器和IDE 强大…

Void: Cursor 的开源平替

GitHub&#xff1a;https://github.com/voideditor/void 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Void&#xff0c;这款编辑器号称是开源的 Cursor 和 GitHub Copilot 替代品&#xff0c;而且完全免费&#xff01; 在你的代码库…

基于HTML+JavaScript+CSS实现教学网站

摘要 21世纪是信息化的时代&#xff0c;信息化物品不断地涌入我们的生活。同时&#xff0c;教育行业也产生了重大变革。传统的身心教授的模式&#xff0c;正在被替代。互联网模式的教育开辟了一片新的热土。 这算是对教育行业的一次重大挑战。截至目前&#xff0c;众多教育行…

基于ssm+mysql的高校设备管理系统(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能&#xff1a;系统登录、员工管理、设备管理、设备采购统计、设备报废统计&#xff1b;用户角色功能&#xff1a;设备采购管理、设备报废管理、个人资料管理。 作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vu…

电力杆塔安全监测解决方案

一、方案背景 在台风、滑坡等自然灾害出现时&#xff0c;极易产生倒杆、断杆、杆塔倾斜、塔基滑动等致使杆塔失稳的状况&#xff0c;进而引发导线断线、线路跳闸等事故&#xff0c;给电网的安全稳定运行造成影响。可借助在铁塔上装设的传感器&#xff0c;能够感知铁塔的工作状态…

基于Quicker构建从截图到公网图像链接获取的自动化流程

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言预备内容转webp程序PicGo设置Quicker设置视频演示总结互动致谢参考 前言 在自建博…

Python Requests库完全指南:从入门到精通

引言 在Python的生态系统中&#xff0c;requests库以其简洁优雅的API设计和强大的功能&#xff0c;成为HTTP请求处理领域的标杆工具。无论是数据爬虫开发、API接口调用&#xff0c;还是自动化测试场景&#xff0c;requests都能将复杂的网络交互简化为几行可读性极高的代码。相…

渗透测试核心技术:内网渗透与横向移动

内网渗透是红队行动的关键阶段,攻击者通过突破边界进入内网后,需快速定位域控、横向移动并维持权限。本节从内网环境搭建、信息收集、横向移动技巧到权限维持工具,系统讲解如何在内网中隐蔽行动并扩大战果。 1. 内网环境搭建与基础配置 目标: 模拟真实企业网络,构建包含…

学习FineBI

FineBI 第一章 FineBI 介绍 1.1. FineBI 概述 FineBI 是帆软软件有限公司推出的一款商业智能 &#xff08;Business Intelligence&#xff09; 产品 。 FineBI 是新一代大数据分析的 BI 工具 &#xff0c; 旨在帮助企业的业务人员充分了解和利用他们的数据 。FineBI 凭借强…