nginx基础

Nginx 简介

Nginx是 高性能Web服务器

  • 静态资源服务器:html,css,js,img,视频,音频
  • 反向代理:代理客户访问 **内部 **(本机、局域网的服务器)服务
  • 负载均衡:将请求(流量)分发给集群中的多台服务器,避免单点压力过大
  • 网站(后端API)入口:根据访问请求的路径参数,进行分发实现动静分离
  • Nginx架构:多进程+单线程架构、适合多核处理器
    • 一个Master进程,N个Work进程
    • Master监控所有的Work进程,旧的Work进程终止时,随时可以启动新的进程
    • Work进程使用单线程接受请求处理请求,避免了线程切换带来的消耗
    • IO多路复用技术:异步非阻塞架构,同时处理更多的请求
    • 异步非阻塞是“任务完成了通知你”,IO 多路复用是“同时盯多个任务,看谁先完成”—— 两者结合,就是高性能服务器的核心逻辑

Nginx安装

  • apt/yum安装
#乌班图安装
#方法1 apt安装
apt update
apt install nginx

#方法2 编译安装
## 安装依赖
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
## 下载源码
wget http://192.168.57.200/Software/nginx-1.26.2.tar.gz
#wget http://nginx.org/download/nginx-latest.tar.gz
## 解压
tar -zxvf nginx-*.tar.gz
## 进入解压后的Nginx源码目录,执行配置脚本,并指定安装目录和其他选项
./configure --prefix=/usr/local/nginx --with-http_ssl_module
## 编译并安装
make && sudo make install

  • 源码编译安装

Centos7安装

#第1.rpm包安装

yum -y install wget vim
# 下载nginx源
$ wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装nginx源
rpm -ivh nginx-*.rpm
# 正式安装nginx
yum -y install nginx
# 设置防火墙
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 启动nginx
systemctl start nginx
# 开机启动nginx
systemctl enable nginx

#第2种.编译安装
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

# nginx依赖pcre库
wget  http://192.168.57.200/Software/pcre-8.45.tar.bz2
或者 wget http://downloads.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
#解压
tar -xvf pcre-8.45.tar.bz2

cd pcre-8.45/

./configure
#make 负责将源代码编译成可用的程序或库,而 make install 负责将编译好的软件部署到系统中合适的位置,以便用户能够方便地使用和调用。
make && make install

# 检验是否安装
pcre-config --version

# 下载编译nginx
cd ..
wget http://192.168.57.200/Software/nginx-1.21.4.tar.gz

tar -xvf nginx-1.21.4.tar.gz

cd nginx-1.21.4

./configure --with-http_stub_status_module --with-http_ssl_module --with-pcre=../pcre-8.45

make && make install

# 安装成功后直接执行nginx启动
/usr/local/nginx/sbin/nginx

nginx 的常用命令

  • nginx 启动nginx
  • nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
  • nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。
  • nginx -s reload 重新加载配置文件;因改变了Nginx相关配置,需要重新加载配置而重载。
  • nginx -s reopen 重新打开日志文件。
  • nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。
  • nginx -t 不运行,仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
  • nginx -v 显示 nginx 的版本。
  • nginx -V 显示 nginx 的版本,编译器版本和配置参数。

使用系统服务管理工具管理nginx


vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

#重新启动加载配置
systemctl daemon-reload 
systemctl reload nginx

Nginx基本配置

nginx.conf

  • 全局配置块

    #启动work进程的用户
    user www-data;
    #启动worler进程的数量,auto 自动获取数量
    worker_processes auto;
    #全局错误日志
    error_lpg logs/error.log;
    #pid 进程号的路径
    pid /run/nginx.pid;
    
    • events模块配置
    #性能优化
    events {
    use epoll; 					# 使用 epoll 事件模型(Linux)
    worker_connections 10240;   # 每个 worker 最大连接数
    multi_accept on; 			# 一次性接受所有新连接
    accept_mutex on; 			# 启用连接接收互斥锁
    }
    
    • http配置:所有HTTP请求与响应的配置
      • sever配置:网站配置;可以配置多个(虚拟主机)
        • location配置:网站路径配置
    http {
    	include /etc/nginx/mime.types;	#引入加载外部模块,mime.types是文件格式;
    	default_type application/octet-stream; #二进制流 MIME 类型,表示 “未知的二进制数据”。通常会将其视为 “需要下载的文件”
    	#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; # 启用内核级文件传输,减少 CPU 消耗和延迟
    	tcp_nopush on; # 配合 sendfile,合并小包发送
    	keepalive_timeout 65; # 长连接超时时间 65 秒
    	#gzip on; # 启动压缩,节省带宽,省流量,但是会占用cpu资源
    	
    	server {
    		listen 80; 				#监听的端口
    		server_name localhost;	#绑定域名,一台服务器可以使用多个域名
    		#charset koi8-r;		#设置默认字符集
    		#access_log logs/host.access.log main; #设置独立的访问日志路径 
    		location / { 			#设置网站的根路径
    			root html;			#设置网站根目录对应的系统目录,默认nginx的安装路径下的html路径
    			index index.html index.htm; #指定首页的名称
    			}
    		error_page 500 502 503 504 /50x.html;
    		location = /50x.html {
    			root html;
    		}
    		#location ~ .php$ {
    		#	proxy_pass http://127.0.0.1; #反向代理,将请求
    		#}
    	}
    }
    
  • 搭建文件下载服务器

autoindex on;

#不显示文件大小
autoindex_exact_size off;

#显示文件时间
autoindex_localtime on;

虚拟主机

虚拟主机是指在同一台服务器上通过不同的标识(域名、IP、端口)托管多个网站的技术,实现 “一台服务器运行多个独立网站” 的效果。

  • 基于IP的虚拟主机
    • 给服务器配置多个IP地址
    • 给每个网站绑定一个IP:192.168.25.25 -> A
# 临时给同一个网卡临时添加多个IP ,重启失效
ip addr add 192.168.25.35/24 dev ens33
ip addr add 192.168.25.36/24 dev ens33
ip addr add 192.168.25.37/24 dev ens33

#在nginx配置文件中新添加上对应的sever配置,一个IP对应一个sever块
server {
	#ip地址+端口号
    listen       192.168.25.35:80;
    server_name 192.168.25.35;
    location / {
    #设置网站根目录对应的系统目录,手动创建好我们设置的目录,并加上.html文件
        root   /data/html1;
        index  index.html index.htm index.php;
    }
}

#检测配置
nginx -t
#重启nginx
nginx -s -stop
nginx

#在浏览器进行测试
  • 基于域名的虚拟主机
    • IP只有一个,但绑定多个域名,每个域名对应一个独立的站点
#先配置windows的域名配置
1.先以管理员的身份打开记事本
2.打开/c盘/Windows/System32/drivers/etc/
3.查看所有文件(包括影藏文件)
4.打开hosts
#增加内容
192.168.25.201	www.ll.com
192.168.25.201	ccc.ll.com
192.168.25.201	zzz.ll.com

#在配置文件中修改sever块中的域名
#只需要修改域名
server_name  www.ll.com ;
server_name  ccc.ll.com ;
server_name  zzz.ll.com ;

#检测配置
nginx -t
#重启nginx
nginx -s -stop
nginx

#在浏览器进行测试

#测试没问题记得把hosts记事本新添加d内容删除
  • 基于端口号的虚拟主机
    • 配置多个端口,每个端口对应一个站点
#在配置文件中修改sever块中的端口号
#只需要修改端口号
listen		8081;
listen		8082;
listen		8083;

#检测配置
nginx -t
#重启nginx
nginx -s -stop
nginx

#在浏览器进行测试

日志配置

日志级别: debug > info > notice > warn > error > crit > alert > emerg

#access_log日志配置
#语法格式:   

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

access_log off;

默认值   : access_log logs/access.log combined;
作用域   : http, server, location, if in location, limit_except

#log_format 定义日志格式

语法格式:   log_format name [escape=default|json] string ...;
默认值    :    log_format combined "...";
作用域    :    http

日志常见的变量

  • $remote_addr, $http_x_forwarded_for 记录客户端IP地址
  • $remote_user记录客户端用户名称
  • $request记录请求的URL和HTTP协议(GET,POST,DEL,等)
  • $status记录请求状态
  • $body_bytes_sent发送给客户端的字节数,不包括响应头的大小;该变量与Apache模块mod_log_config里的“%B”参数兼容。
  • $bytes_sent发送给客户端的总字节数。
  • $connection连接的序列号。
  • $connection_requests 当前通过一个连接获得的请求数量。
  • $msec 日志写入时间。单位为秒,精度是毫秒。
  • $pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
  • $http_referer 记录从哪个页面链接访问过来的
  • $http_user_agent记录客户端浏览器相关信息
  • $request_length请求的长度(包括请求行,请求头和请求正文)。
  • $request_time 请求处理时间,单位为秒,精度毫秒;从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
  • $time_iso8601 ISO8601标准格式下的本地时间。
  • $time_local通用日志格式下的本地时间。

站点路径配置 location

#语法

location [修饰符] 路径 {
    # 配置内容
}

location url路径 {
	#root  /usr/var/www;
	 alias /usr/var/www;
	 index index.html;
}
  • root 指定站点的“根”路径; URL访问到的真实目录是“网站根路径”+“url目录”
    • /web1 -> /var/www/html/web1;
  • alias 指定是路径本身
    • /web2 -> /data/web2;

常用的修饰符

  1. 无修饰符:默认情况下使用前缀匹配。以该路径开头的路径都能匹配到;
  2. =:精确匹配。只匹配指定的路径,不进行正则表达式或前缀匹配。
location = /login.html {
	root /data/web1 ;
}
  1. ~:区分大小写的正则表达式匹配。
location ~ \.php$ {
    proxy_pass http://php_server;
}
  1. ~*:不区分大小写的正则表达式匹配。
location ~* \.(jpg|jpeg|png|gif)$ {
    root /var/www/images;
}
  1. ^~:前缀匹配,如果找到匹配项,将不再进行正则表达式匹配。
location ^~ /static/ {
    root /var/www/static;
}
#匹配所有以/static/开头的路径,优先于正则表达式匹配。

匹配优先级

在Nginx中,location的匹配优先级如下:

  1. 精确匹配=):最高优先级。
  2. 前缀匹配^~):优先于正则表达式匹配。
  3. 正则表达式匹配~~*):若有多个正则表达式匹配,则使用第一个匹配的规则。
  4. 前缀匹配(无修饰符):最低优先级。

重写和重定向

  • rewrite重写

rewrite 是在服务器内部改变 URL,客户端不会察觉到 URL 的变化。rewrite 通常用于将一个 URL 模式匹配到另一个 URL 模式,而不改变浏览器中的 URL。

#语法:
rewrite 正则表达式 替换目标 [标志];
#示例:
location /oldpage {
    rewrite ^/oldpage/(.*)$ /newpage/$1 last;
}
#访问oldpage时,页面会自动显示newpage的网页的内容,但网址显示的是oldpage

  • return重定向

重定向是让客户端浏览器实际改变 URL。Nginx 返回一个 HTTP 状态码(通常是 301 永久重定向或 302 临时重定向),告诉客户端浏览器去请求一个新的 URL。

#案例
location /oldpage {
    return 301 /newpage;
}
#当请求 /oldpage 时,Nginx 会返回一个 301 永久重定向状态码,告诉客户端浏览器去请求 /newpage。浏览器中的 URL 会改变为 /newpage。

重写与重定向的区别

  1. URL 是否改变
    • rewrite 重写:URL 不会在客户端浏览器中改变。
    • return 重定向:URL 会在客户端浏览器中改变。
  2. HTTP 状态码
    • rewrite 重写:不涉及 HTTP 状态码。
    • return 重定向:返回 301 或 302 状态码。
  3. 应用场景
    • rewrite 重写:常用于内部 URL 重写,比如将动态 URL 重写为静态 URL,或者将复杂的 URL 结构简化。
    • return 重定向:常用于永久或临时改变 URL,比如网站改版后将旧 URL 重定向到新 URL。

http状态码

  • 100 Continue:客户端发送请求头后,服务器允许继续发送请求体(需客户端显式请求)。
  • 101 Switching Protocols:服务器同意客户端切换协议(如 HTTP 切换到 WebSocket)。
  • 200 OK:请求成功(最常见,如正常返回网页内容)。
  • 201 Created:请求成功且创建了新资源(如 POST 提交表单创建数据)。
  • 204 No Content:请求成功,但无返回内容(如 DELETE 请求删除资源后)。
  • 206 Partial Content:部分请求成功(如断点续传,客户端请求文件的一部分)。
  • 301 Moved Permanently:资源永久迁移到新地址(Nginx 中通过 rewrite ... permanent; 配置)。
  • 302 Found:资源临时迁移(临时重定向,Nginx 默认 rewrite 不带参数时返回 302)。
  • 304 Not Modified:资源未修改,客户端可使用本地缓存(基于请求头 If-Modified-SinceIf-None-Match)。
  • 307 Temporary Redirect:临时重定向,严格保持请求方法(如 POST 请求重定向后仍用 POST)。
  • 308 Permanent Redirect:永久重定向,严格保持请求方法(301 的升级版)。
  • 400 Bad Request:请求格式错误(如请求头无效、参数格式不正确)。
  • 401 Unauthorized:请求需要身份验证(如未登录访问受保护资源,配合 auth_basic 模块)。
  • 403 Forbidden:服务器拒绝请求(常见原因:权限不足、目录无索引文件且未开启 autoindex)。
  • 404 Not Found:请求的资源不存在(如访问不存在的页面、文件路径错误)。
  • 405 Method Not Allowed:请求方法不被允许(如用 POST 访问只支持 GET 的接口)。
  • 408 Request Timeout:客户端请求超时(Nginx 可通过 client_body_timeout 等配置控制)。
  • 409 Conflict:请求与服务器资源冲突(如创建已存在的资源)。
  • 413 Request Entity Too Large:请求体过大(Nginx 可通过 client_max_body_size 限制)。
  • 414 Request-URI Too Long:请求 URL 过长(超出服务器处理能力)。
  • 429 Too Many Requests:客户端请求过于频繁(可通过 Nginx 限流模块 limit_req 触发)。
  • 500 Internal Server Error:服务器内部错误(如 Nginx 配置错误、后端程序崩溃)。
  • 502 Bad Gateway:Nginx 作为反向代理时,后端服务器无响应或返回无效响应。
  • 503 Service Unavailable:服务器暂时不可用(如维护中,可通过 return 503; 主动返回)。
  • 504 Gateway Timeout:反向代理时,后端服务器处理超时(可通过 proxy_read_timeout 调整)。
  • 505 HTTP Version Not Supported:服务器不支持请求的 HTTP 版本(如 HTTP/3.0)。

https 证书

  • HTTPS = SSL\TLS + HTTP
    • 用「数字证书」防冒充(确认对方是真的);
    • 用「非对称加密」安全传 “钥匙”(避免钥匙被偷);
    • 用「对称加密」快速传数据(保证数据跑得快又安全);
    • 用「数字签名」防篡改(确认数据没被动手脚)
  • CA证书:防止“中间人攻击”
    • 中间人攻击的本质是 “两头冒充”(冒充你、冒充网站),而 CA 证书的作用就是给网站的 “身份” 和 “公钥” 做官方背书 —— 让你能通过浏览器确认:“我连的这个网站,确实是我想找的那个,不是中间人伪装的”。
  • 对称加密、非对称加密
    • 对称加密:加密解密都是一个钥匙,速度快,容易泄露;
    • 非对称加密:公钥和私钥,一方加密,另一方解密;

生成证书


# 1.进入证书目录
cd /etc/nginx/sslkey

# 2.创建本地私有密钥
openssl genrsa -out ssl.key 2048

# 3.按提示输入即可
openssl req -new -key ssl.key -out ssl.csr

# 4.创建证书crt
openssl x509 -req -days 1460 -in ssl.csr -signkey ssl.key -out ssl.crt

# 5.创建证书pem
openssl dhparam -out ssl.pem 2048

nginx 配置证书

#在配置文件中添加修改以下内容
vim /usr/local/nginx/conf/nginx.conf

server {
    listen       80;
    return 301 https://$host$request_uri;
}


server {
    listen 443   ssl;
    #修改到对应的路径
    ssl_certificate        /etc/nginx/sslkey/ssl.crt;
    #修改到对应的路径
    ssl_certificate_key    /etc/nginx/sslkey/ssl.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!KRB5:!aECDH:!EDH+3DES;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
}

代理与反向代理

正向代理代理的是客户端,反向代理代理的服务端

正向代理:代理用户访问其他网站,比如ss,蓝灯。

反向代理:用来发布服务器,比如nginx

#在代理服务器上修改配置文件
#编辑配置文件中的location模块 绑定要代理的服务器IP
location / {
    proxy_pass http://192.168.25.202;      # 请求转向后台服务器  
 #反向代理优化设置(可选项)
    proxy_set_header Host $host;      # 修改请求头,添加Host字段
	proxy_set_header X-Real-IP $remote_addr;   # 修改请求头,添加X-Real-IP字段
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   # 修改请求头,添加X-Forwarded-For字段
	client_max_body_size 10m;        # 允许客户端请求的最大单文件字节数
	client_body_buffer_size 128k;    # 缓冲区代理缓冲用户端请求的最大字节数,
	proxy_connect_timeout 90;        # nginx跟后端服务器连接超时时间\(代理连接超时\)
	proxy_send_timeout 90;           # 后端服务器数据回传时间\(代理发送超时\)
	proxy_read_timeout 90;           # 连接成功后,后端服务器响应时间\(代理接收超时\)
	proxy_buffer_size 4k;            # 设置代理服务器(nginx)保存用户头信息的缓冲区大小
	proxy_buffers 4 32k;             # proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
	proxy_busy_buffers_size 64k;     # 高负荷下缓冲大小(proxy_buffers*2)
	proxy_temp_file_write_size 64k;  # 设定缓存文件夹大小,大于这个值,将从upstream服务器传
	
}

负载均衡

作为代理服务器,一般都需要向上游服务器的集群转发请求。这里的负载均衡是指选择一种策略,尽量把请求平均地分布到每一台上游服务器上。

负载均衡的模式(算法)

  • 轮询(Round Robin)(RR)
    • 这是 Nginx 的默认策略。它会按照顺序将请求依次分发给每个服务器,不考虑每个服务器的负载情况。这种方式简单有效,适合服务器性能相似的场景。
  • 最少连接数(Least Connections)(LS)
    • 负载均衡服务器会记录每台后端服务器的连接数,它会将请求分发给当前处理连接数最少的服务器,适合连接数波动较大的场景,如长连接服务。
  • IP 哈希(IP Hash)
    • 通过请求的客户端IP进行哈希运算,将来自同一IP地址的请求分发到同一台服务器上,适合有会话保持需求的场景。
  • 权重(Weight)
    • 为不同的服务器分配权重,Nginx 将根据设置的权重值来分发请求,权重越高的服务器将承担更多的流量,适合服务器性能不均衡的场景。“加权轮询”

upstream 块

upstream块设置集群的分组,便于反向代理中的 proxy_pass 使用。

##在代理服务器上修改配置文件

#1.轮询算法
#语法: upstream name {...} 配置块: http
upstream wbe1 {
        server 192.168.25.202;
        server 192.168.25.204;
    }
server {
	    listen       80;
        server_name  192.168.25.201;

        location / {
          proxy_pass http://web1;
        }
    }
#这样就可以通过访问201来实现反向代理202和204并实现负载均衡


#2.最小连接数算法
upstream wbe1 {
		least_conn; #最小连接数
        server 192.168.25.202;
        server 192.168.25.204;
    }
server {
	    listen       80;
        server_name  192.168.25.201;

        location / {
          proxy_pass http://web1;
        }
    }

#3.ip_hash 算法
upstream wbe1 {
		ip_hash;  #ip哈希算法
        server 192.168.25.202;
        server 192.168.25.204;
    }
server {
	    listen       80;
        server_name  192.168.25.201;

        location / {
          proxy_pass http://web1;
        }
    }

#4.权重算法
upstream wbe1 {

        server 192.168.25.202 weight=2;
        server 192.168.25.204 weight=3;
    }
server {.
	    listen       80;
        server_name  192.168.25.201;

        location / {
          proxy_pass http://web1;
        }
    }

#其他配置向 加在ip后面
weight=number: 设置向这台上游服务器转发的权重,默认为1。

max_fails=number: 该选项与 fail_timeout 配合使用,指在 fail_timeout 时间段内,如果向当前的上游服务器转发失败次数超过 number,则认为在当前的 fail_timeout 时间段内这台上游服务器不可用。max fails 默认为1,如果设置为 0,则表示不检查失败次数。

fail_timeout=time: fail_timeout 表示该时间段内转发失败多少次后就认为上游服务器暂时不可用,用于优化反向代理功能。它与向上游服务器建立连接的超时时间、读取上游服务器的响应超时时间等完全无关。fail_timeout 默认为10秒。

down: 表示所在的上游服务器永久下线

backup: 它表示所在的服务器只是备份服务器,只有在所有的非备份服务器都失效后,才会向所在的备份服务器转发请求。backup 在 ip_hash 下仍有作用,只是不参与正常的哈希分配逻辑。

优化配置

  • 灰度发布
    • 增量发布,逐步的用新版本替换旧版本,实现平稳过渡,新版本出现问题时,方便及时回滚。
  • Nginx平滑升级
    • 在不停止Nginx服务的情况下,更新Nginx版本。
  • Worker进程数量和最大连接数
  • gzip on
    • 是否压缩,压缩可以节省带宽费用,降低传输时间,增加用户体验度。
  • 长连接
    • 减少服务器维护因为与客户端建立http连接产生的大量tcp三次握手四次断开的开销。
  • 本地缓存静态文件
    • 将部分数据缓存在用户本地磁盘,用户加载时,如果本地和服务器的数据一致,则从本地加载。提升用户访问速度,提升体验度。节省公司带宽成本。

访问控制

你可以使用 allowdeny 指令来根据客户端的 IP 地址允许或拒绝访问。

#允许特定 IP,拒绝所有其他 IP
location /admin {
        # 只允许特定IP地址访问 /admin
        allow 192.168.1.100;
        allow 10.0.0.0/24;
        deny all;
        }

#基于用户身份的访问控制  访问时需要登陆账号密码
#1. ubuntu 安装
#安装htpasswd
apt install apache2-utils

#2.创建账号密码文件
#              账号密码文件路径      用户名
htpasswd -c /etc/nginx/.htpasswd username

#3.修改配置文件
location /admin {
    auth_basic "Restricted Access";
    #路径写对
    auth_basic_user_file /etc/nginx/.htpasswd;
    }
    
# 基于用户代理的访问控制 阻止某些爬虫或恶意请求
 location / {
        if ($http_user_agent ~* "badbot|maliciousbot") {
            return 403;  # 返回 403 Forbidden
        }
     }     

跨越配置

  • 前后端分离:前端代码与后端代码,开发与部署是独立的。数据通过API接口进行传输。

  • 解决跨越问题的方法

    • JSONP使用<script>实现跨越,方法较老,不推荐使用;

    • CORS,在请求头中设置,运行浏览器进行跨越;

        location / {
              add_header 'Access-Control-Allow-Origin' '*';
              add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
              add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
              add_header Access-Control-Allow-Credentials 'true';
              # ...
      
          }
      
    • 反向代理,将前后代理到同一个“域”下;域名、协议、端口相同;

LNMP环境搭建(单机版)

  • Linux+Nginx+MySQL+PHP/Python/Prel
    • PHP
      • 优点:简单,学习成本低,开发成本低,开发网站特别高效;
      • 缺点:功能较为单一,不擅长移动端开发;
#1.关闭防火墙
sudo ufw disable

#2.安装Nginx

#乌班图安装
#方法1 apt安装
apt update
apt install nginx

#方法2 编译安装
## 安装依赖
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
## 下载源码
wget http://192.168.57.200/Software/nginx-1.26.2.tar.gz
#wget http://nginx.org/download/nginx-latest.tar.gz
## 解压
tar -zxvf nginx-*.tar.gz
## 进入解压后的Nginx源码目录,执行配置脚本,并指定安装目录和其他选项
./configure --prefix=/usr/local/nginx --with-http_ssl_module
## 编译并安装
make && sudo make install

#3.安装并配置MySQL
使用脚本一件安装

#4.安装并配置PHP
#下载PHP与PHP-MySQL模块
sudo apt -y install php-fpm php-mysql
#检查版本
php -v

#5.修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf 
----------------
user www-data;
#在server{}内,找到index开头的配置行,在该行中添加index.php。
server {
        listen       80;
        server_name  192.168.25.201;
        root   html;
 		index  index.php index.html index.htm ;
				·····
				
				
#在server{}内找到location ~ \.php$ {},去除以下配置行的注释符号。
	location ~ \.php$ {
			fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # 匹配 PHP 8.1 的监听地址
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
}
-------------------
#保存退出  
#检查配置文件是否正确
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
#重启nginx
systemctl restart nginx

#6.配置php
#vim <网站根目录>/phpinfo.php
vim /usr/local/nginx/html/phpinfo.php

-----------------------
<?php echo phpinfo(); ?>
-----------------------
#保存退出
#启动php服务
systemctl start php8.1-fpm

#7.在浏览器测试
http://192.168.25.201/phpinfo.php
#查看是否是php配置信息页面,是的话表示LNMP环境部署成功

#8.成功搭建LNMP环境后,建议您删除phpinfo.php测试文件,消除数据泄露风险。
#sudo rm -rf <网站根目录>/phpinfo.php

第二种

#1.关闭防火墙
sudo ufw disable

#2.安装Nginx

#乌班图安装
#方法1 apt安装
apt update
apt install nginx

#方法2 编译安装
## 安装依赖
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
## 下载源码
wget http://192.168.57.200/Software/nginx-1.26.2.tar.gz
#wget http://nginx.org/download/nginx-latest.tar.gz
## 解压
tar -zxvf nginx-*.tar.gz
## 进入解压后的Nginx源码目录,执行配置脚本,并指定安装目录和其他选项
./configure --prefix=/usr/local/nginx --with-http_ssl_module
## 编译并安装
make && sudo make install

#3.安装并配置MySQL
使用脚本一件安装

#4.安装并配置PHP
#下载PHP与PHP-MySQL模块
apt -y install php-fpm php-mysql php-xml

#改php的配置文件
vim /etc/php/8.1/fpm/pool.d/www.conf

#第37行
listen = 9000

#重启php
systemctl restart php8.1-fpm.service

#编辑nginx配置文件
vim /usr/local/nginx/conf/nginx.conf

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/usr/local/nginx/html$fastcgi_script_name;
	include fastcgi_params;
}

#重启nginx
systemctl restart nginx

动静分离(简单分布式)

  • Nginx网关
  • NFS:文件共享,不同服务器之间的数据同步
  • Nginx+静态资源
  • PHP
  • MySQL

为什么要做动静分离?

动态服务(PHP,JAVA,Python,GO)与静态服务(HTML,CSS,JS,图片,视频,音频)进行独立部署

  • 提升性能:动态服务与静态服务互不干扰,降低服务器的负载(CPU,内存占用率);

  • 方便扩容:

    • 当并发量大量增加时,通过增加动态服务器来,负载均衡提升性能;
    • 使用CDN(内容分发网络),加速静态资源的访问速度;
  • 提升安全性:对动态服务器进行隔离,增加数据的安全性;

实验步骤

准备工作

服务器分配

IP 功能 软件
192.168.25.211 共享服务器 NFS服务
192.168.25.212 网络入口,数据转发,静态文件 Nginx服务
192.168.25.213 处理动态数据 PHP-FPM+nfs客户端
192.168.25.214 图片服务器 Nginx服务+nfs客户端
192.168.25.215 数据库服务 MySQL服务,开启远程账号

二、配置详解

1.NFS服务器配置

IP: 192.168.25.211

# CentOS7安装NFS
yum -y install nfs-utils

# Ubuntu安装NFS
apt install -y nfs-kernel-server

# 创建共享目录
mkdir -p /app/blog
chown -R www-data:www-data /app/blog  
chmod -R 755 /app/blog 

# 修改共享配置
vim /etc/exports
# 只允许内网网段挂载,提高安全性。
/app/blog   192.168.25.0/24(rw,sync,root_squash,no_all_squash,no_subtree_check)
# 刷新 NFS 配置
exportfs -r

# Ubuntu 重启服务
systemctl restart nfs-kernel-server
systemctl enable nfs-kernel-server

# CentOS7 重启服务
sudo systemctl start rpcbind nfs-server
sudo systemctl enable rpcbind nfs-server


# 下载wordpress文件
wget http://192.168.57.200/Software/wordpress-6.6.1-zh_CN.zip
# 解压
unzip wordpress-6.6.1-zh_CN.zip
# 发送到共享数据
cp -r wordpress/*  /app/blog
# 进入共享数据
chown -R www-data:www-data /app/blog
cd /app/blog

2.Nginx服务器配置

IP: 192.168.25.212

首先Nginx与PHP服务器都要挂载NFS。实现统一部署方便管理

# CentOS7安装依赖
yum install nfs-utils

# Ubuntu安装依赖依赖
apt install -y nfs-common

# 安装Nginx
## 安装依赖
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
## 下载源码
wget http://192.168.57.200/Software/nginx-1.26.2.tar.gz
#wget http://nginx.org/download/nginx-latest.tar.gz
## 解压
tar -zxvf nginx-*.tar.gz
## 进入解压后的Nginx源码目录,执行配置脚本,并指定安装目录和其他选项
./configure --prefix=/usr/local/nginx --with-http_ssl_module
## 编译并安装
make && sudo make install

# 创建共享目录
mkdir -p /app/blog

# 将NFS的/app/blog挂载至本地的/app/blog
mount 192.168.25.211:/app/blog /app/blog

# 永久挂载:编辑 /etc/fstab,添加一行
echo "192.168.25.211:/app/blog  /app/blog  nfs  defaults  0 0" >> /etc/fstab
# 验证挂载:mount -a (无报错则正常)

然后再配置Nginx

Nginx主要是server中的location的配置。配置location将.php结尾的交给PHP服务器。将.jpg、gif结尾的交给Image。其他配置按默认即可。

#修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # 1. 日志路径:编译安装的 Nginx 日志默认存放在 /usr/local/nginx/logs
    access_log  /usr/local/nginx/logs/access.log  main;

    sendfile             on;
    tcp_nopush           on;
    tcp_nodelay          on;
    keepalive_timeout    65;
    types_hash_max_size  2048;

    # 2. mime.types 路径:编译安装的 Nginx 配置文件默认在 /usr/local/nginx/conf
    include              /usr/local/nginx/conf/mime.types;
    default_type         application/octet-stream;

    # 3. 子配置文件引入路径:匹配编译安装的 conf.d 目录位置
    include /usr/local/nginx/conf/conf.d/*.conf;

    server {
        listen       80 default_server;
        server_name  192.168.25.212;  # 可根据实际需求修改为服务器IP或域名
        index index.php index.html;

        # 4. 网站根目录:若 NFS 挂载点在 /usr/local/nginx 下(如 /usr/local/nginx/html/blog),需按实际挂载路径调整
        # (注:若原 /app/blog 是 NFS 挂载点,需确保新路径已正确挂载 NFS,示例按 "NFS挂载到 /usr/local/nginx/html/blog" 调整)
        root          /app/blog;

        # 5. 子配置文件引入:匹配编译安装的 default.d 目录位置
        include /usr/local/nginx/conf/default.d/*.conf;
# 静态文件直接处理(补充:.css/.js/.ico 等)
 location ~* \.(css|js|ico|txt|xml)$ {
            expires 1d;  # 缓存优化
        }
        # PHP 解析配置(保持 fastcgi_pass 等参数不变,仅确保 SCRIPT_FILENAME 与 root 路径一致)
        
         location ~ \.php$ {  # 用 ~ 而非 ~*(区分大小写,符合 PHP 规范)
            fastcgi_pass  192.168.25.213:9000;
            fastcgi_index index.php;
            # 关键:SCRIPT_FILENAME 与 root 一致
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include       fastcgi_params;
        }

        # 图片请求转发(保持原配置不变,确保目标 Image 服务器 192.168.25.214 正常提供服务)
       location ~* \.(jpg|jpeg|png|gif|webp)$ {
            proxy_pass http://192.168.25.214;
            proxy_set_header Host $host;  # 传递主机头,避免图片服务器 404
        }
        # 7. 错误页面路径:匹配编译安装的 html 目录(默认存放错误页面的位置)
        error_page 404 /404.html;
            location = /40x.html {
                root /usr/local/nginx/html;  # 明确错误页面所在目录
            }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root /usr/local/nginx/html;  # 明确错误页面所在目录
            }
    }
}

# 4. 重启 Nginx 并验证
/usr/local/nginx/sbin/nginx -t  # 检查配置语法(必须无报错)
/usr/local/nginx/sbin/nginx -s reload

3.PHP服务器配置

IP: 192.168.25.213

# CentOS7安装依赖
yum install nfs-utils

# Ubuntu安装依赖 nfs客户端
apt install -y nfs-common

# 创建共享目录
mkdir -p /app/blog

# 将NFS的/app/blog挂载至本地的/app/blog
mount 192.168.25.211:/app/blog /app/blog
#永久挂载
echo "192.168.25.211:/app/blog  /app/blog  nfs  defaults  0 0" >> /etc/fstab
mount -a

PHP服务器的配置比较简单,主要讲PHP以FPM模式安装后进行简单的配置即可

# CentOS7
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install mod_php72w.x86_64 php72w-cli.x86_64 php72w-common.x86_64 php72w-mysqlnd php72w-fpm.x86_64

vim  /etc/php-fpm.d/www.conf

# Ubuntu 安装php
sudo apt update
sudo apt install php-fpm php-mysql
#编辑php配置文件
vim /etc/php/8.1/fpm/pool.d/www.conf

# 只写监听端口,即监听所有IP
listen = 9000
# 将这行注释,可以允许所有IP进行访问,否则只能本机访问。
; listen.allowed_clients = 127.0.0.1
user = www-data 
group = www-data

# 启动 PHP 8.1-FPM 服务
sudo systemctl start php8.1-fpm

# 设置开机自启(可选,推荐)
sudo systemctl enable php8.1-fpm

# 查看服务状态,确认是否启动成功
sudo systemctl status php8.1-fpm

4.Image服务器配置

IP: 192.168.25.214

# CentOS7安装依赖
yum install nfs-utils
wget http://192.168.57.200/Software/nginx_install.sh
bash nginx_install.sh

# Ubuntu安装Nginx和nfs-common
sudo apt install nginx  nfs-common -y

# 创建共享目录
mkdir -p /app/blog

# 将NFS的/app/blog挂载至本地的/app/blog
mount 192.168.25.211:/app/blog /app/blog

#永久挂载
echo "192.168.25.211:/app/blog  /app/blog  nfs  defaults  0 0" >> /etc/fstab
mount -a

#修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile      on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  192.168.25.214;  
        root         /app/blog;  # 指向 NFS 挂载点

        # 仅允许图片类型请求,其他请求返回 403
        location / {
            if ($request_filename !~* \.(jpg|jpeg|png|gif|webp)$) {
                return 403;
            }
            expires 7d;  # 图片缓存 7 天,优化性能
        }
    }
}

#检查配置文件
/usr/local/nginx/sbin/nginx -t
#重启服务
systemctl restart nginx 

5.MySQL服务器

IP: 192.168.25.215

# Ubuntu 
#apt安装
#apt -y install mysql-server

# 或者二进制脚本安装
wget http://192.168.57.200/Software/mysql_install.sh

bash mysql_install.sh

# 编辑环境变量配置文件
vim /etc/profile
#在文件末尾添加以下内容(指定 MySQL bin 目录路径)
export PATH=$PATH:/usr/local/mysql/bin
#保存退出后,使环境变量立即生效
source /etc/profile

# 开启远程访问(Ubuntu 关键步骤)
vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0  # 改为 0.0.0.0(监听所有网卡)
systemctl restart mysql  # 重启 MySQL

# 创建wordpress数据库与远程账号
mysql -uroot -proot123

CREATE DATABASE wordpress charset utf8mb4;

CREATE USER 'wordpress'@'192.168.25.%' IDENTIFIED BY 'admin1234';

GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'192.168.25.%';

FLUSH PRIVILEGES;

6.配置wordpress

#在 NFS 服务器(211)上执行(确保配置同步到所有客户端)
cd /app/blog
cp wp-config-sample.php wp-config.php
#修改配置文件
vim wp-config.php

/** WordPress数据库的名称 */
define('DB_NAME', 'wordpress');                      # wpdb为MySQL中创建的数据库

/** MySQL数据库用户名 */
define('DB_USER', 'wordpress');                     # wpadm为MySQL中授权的用户

/** MySQL数据库密码 */
define('DB_PASSWORD', 'admin1234');                # 授权用户的密码

/** MySQL主机 */
define('DB_HOST', '192.168.25.215');                # MySQL主机地址

# 保存退出,修正配置文件权限
chown www-data:www-data wp-config.php
chmod 600 wp-config.php  # 仅属主可读写,提升安全

至此配置就已经完成。达到了图片从图片服务器返回,静态nginx直接返回,动态交给PHP进行处理。

#验证

访问前端 Nginx:在浏览器输入 http://192.168.25.212,应进入 WordPress 安装向导(填写站点名称、管理员账号)。

验证 PHP 处理:安装完成后,能正常登录 WordPress 后台(说明 PHP 与 MySQL 通信正常)。

验证图片服务器:在后台上传一张图片,查看图片 URL 应为 http://192.168.25.214/wp-content/uploads/...,且能正常显示(说明图片转发生效)。

验证 NFS 同步:在 NFS 服务器(211)的 /app/blog/wp-content/uploads 中,应能看到上传的图片文件(说明共享目录同步正常)。

总结

1.前端Nginx要做好location匹配,将.php与.jpg等进行反向代理。

2.后端PHP服务器要修改配置文件,PHP自带配置文件只监听本地,且只允许本地访问

3.后端Image服务器,不论是apache还是Nginx要开启WEB服务。根目录要指向图片根目录,且根目录下的图片要与原本图片文件目录结构一致。

Tomcat基础

  • java:编译型、面向对象、一次编译到处运行
    • JVM(JAVA虚拟机)运行JAVA的字节码
    • Java的编译流程
      • 1.安装JDK(Java开发运行环境);
      • 2.安装Maven(Java包管理工具):一键下载依赖、编译、打包;
      • 3.下载源代码,git clone ;选装IDEA;
      • 4.使用Maven编译打包生成war包;JPress;
      • 5.安装配置Tomcat,将xxx.war包复制到webapps目标中;
      • 6.运行Tomcat,war包自动解压缩,安装配置MySQL;
      • 7.打开浏览器,查看 IP:8080 ,是否运行正常;
      • 8.使用Nginx反向代理Tomcat;

Tomcat介绍

Tomcat 是Web应用服务器, 用来部署JavaWeb项目;

Linux 操作系统上 安装JPress(Tomcat 部署项目)

#在windows 桌面操作
#1.下载jdk1.8.0_451 Windows版 到f盘school_apps
·下载好后搭建系统环境变量
·桌面右键此电脑->属性->高级系统设置->环境变量
·在系统变量里新建 JAVA_HOME 变量值是文件路径 F:\school_apps\jdk1.8.0_451
·在系统变量中找到 Path ->双击-> 新建->添加 %JAVA_HOME%\bin
·在终端中输入 java -version 测试是否设置成功
显示--------------------
java version "1.8.0_451"
Java(TM) SE Runtime Environment (build 1.8.0_451-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.451-b10, mixed mode)
------------------------测试成功

#2.下载apache-maven-3.9.10  Windows版 到f盘school_apps
·下载好后搭建系统环境变量
·桌面右键此电脑->属性->高级系统设置->环境变量
·在系统变量里新建 MAVEN_HOME 变量值是文件路径 F:\school_apps\apache-maven-3.9.10
·在系统变量中找到 Path ->双击-> 新建->添加 %MAVEN_HOME%\bin
·在终端中输入 mvn -version 测试是否设置成功
显示----------------------
Apache Maven 3.9.10 (5f519b97e944483d878815739f519b2eade0a91d)
Maven home: F:\school_apps\apache-maven-3.9.10
Java version: 1.8.0_451, vendor: Oracle Corporation, runtime: F:\school_apps\jdk1.8.0_451\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
-------------------------测试成功

#3.在maven 的安装目录F:\school_apps\apache-maven-3.9.10里
·新建一个文件夹 maven_repository

#4.配置 maven 的配置文件  F:\school_apps\apache-maven-3.9.10\conf\settings.xml
·在浏览器搜索 华为开源镜像站
语言类->Maven->找到并复制
-----------------------------------
<mirror>
    <id>huaweicloud</id>
    <mirrorOf>*</mirrorOf>
    <url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
-----------------------------------
复制到settings.xml中的161行附近 </mirrors>上面的位置 然后把原有的内容注释掉

·复制第53行注释掉的<localRepository>/path/to/local/repo</localRepository>
在下面重新粘贴并修改路径,这个位置是安装依赖所在的位置
<localRepository>F:\school_apps\apache-maven-3.9.10\maven_repository</localRepository>

#5.创建修改好后,打开终端中
输入mvn help:system 
出现BUILD SUCCESS 说明执行成功
找到新建的maven_repository文件夹查看里面是否有 org 文件夹
如果里面生成文件,即说明修改成功。

#6.下载源代码到F:\school_apps中
·在终端中切换目录到F:\school_apps
cd F:\school_apps
·使用命令下载源代码
git clone https://gitee.com/JPressProjects/jpress.git

#7.下载好源码后进行编译 使用命令行编译
·切换到下载好的源码目录
cd F:\school_apps\jpress
·执行编译命令 mvn clean package 然后回车 等待编译结束 
mvn clean package
·编译完成后查看F:\school_apps\jpress\starter-tomcat\target中是否有 starter-tomcat-5.0.war

#在Linux虚拟机上操作
#8.在linux上安装jdk 安装到/usr/loacl/jdk
·先创建/usr/loacl/jdk 目录
cd /usr/loacl
mkdir jdk
cd jdk
·在windows终端中将提前下载好的jdk-8u451-linux-x64.tar.gz 安装包 发送到Linux 的/usr/loacl/jdk 目录中
scp E:\lwy用户\下载\JDK-Tomcat-Maven\jdk-8u451-linux-x64.tar.gz root@192.168.25.211:/usr/local/jdk
·然后在jdk目录中解压
tar -xvf jdk-8u451-linux-x64.tar.gz
·解压好后修改一下文件名
mv jdk1.8.0_451/ jdk1.8
·查看jdk1.8的完整路径
cd jdk1.8
pwd
·配置 jdk 环境变量
vim /etc/profile

在最后一行后面添加
#set java enviroment
JAVA_HOME=/usr/local/jdk/jdk1.8 
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

·保存退出,并重置环境
source /etc/profile
·查看版本,输出是否正确
java -version

#9.在linux上 Centos7 上安装tomcat 安装到/usr/loacl/tomcat
·先创建/usr/loacl/tomcat 目录
cd /usr/loacl
mkdir tomcat
cd tomcat
·在windows终端中将提前下载好的apache-tomcat-9.0.106.tar.gz 安装包 发送到Linux 的/usr/loacl/tomcat 目录中
scp E:\lwy用户\下载\JDK-Tomcat-Maven\apache-tomcat-9.0.106.tar.gz root@192.168.25.211:/usr/local/tomcat
·在tomcat目录中解压
tar -xvf apache-tomcat-9.0.106.tar.gz
·解压好后修改一下文件名
mv apache-tomcat-9.0.106 tomcat9.0.106
·进入 tomcat9.0.106 的 bin 目录,输入启动指令
cd tomcat9.0.106/bin
执行 ./startup.sh 
·测试是否启动成功,在浏览器中输入:192.168.25.211:8080
查看是否进入tomcat 9.0.106 页面
·配置 tomcat 环境变量
·在windows终端中将提前编译好的starter-tomcat-5.0.war 发送到Linux 的/usr/local/tomcat/tomcat9.0.106/webapps 目录中
scp F:\school_apps\jpress\starter-tomcat\target\starter-tomcat-5.0.war root@192.168.25.211:/usr/local/tomcat/tomcat9.0.106/webapps
·把webapps里的原有文件删除,只留下我们上传上去的.war文件
·测试是否启动成功,在浏览器中输入:192.168.25.211:8080


#9.在linux上 UBuntu 上安装tomcat
·使用apt 下载 tomcat
apt -y install tomcat9         
·查找webapps的文件路径
find / -name webapps
/var/lib/tomcat9/webapps
·修改配置文件
vim /etc/tomcat9/server.xml

修改port端口号为9527
<Connector port="9527" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
·保存退出,重启tomcat9
systemctl restart tomcat9

·在windows终端中将提前编译好的starter-tomcat-5.0.war 发送到Linux 的 /var/lib/tomcat9/webapps目录中
 scp F:\school_apps\jpress\starter-tomcat\target\starter-tomcat-5.0.war root@192.168.25.211:/var/lib/tomcat9/webapps
·把webapps中的原有文件删除,只保留上传的.war文件
·去浏览器测试搜索 192.168.25.211:9527 是否能打开JPress页面

#10.在linux上安装MySQL
·使用二进制脚本安装MySQL
wget http://192.168.57.200/Software/mysql_install.sh
·执行脚本
bash mysql_install.sh
·编辑环境变量配置文件
vim /etc/profile
·在文件末尾添加以下内容(指定 MySQL bin 目录路径)
export PATH=$PATH:/usr/local/mysql/bin
·保存退出后,使环境变量立即生效
source /etc/profile
·开启远程访问(Ubuntu 关键步骤)
vim /etc/mysql/mysql.conf.d/mysqld.cnf
·改为 0.0.0.0(监听所有网卡)
bind-address = 0.0.0.0  
·重启MySQL
systemctl restart mysql

·进去mysql 创建一个库
mysql -uroot -proot123
·创建 jpress 库
create database jpress ;
·退出
·去浏览器测试搜索 192.168.25.211:9527 安装步骤创建jpress网页
  • LNMT环境搭建
posted @ 2025-09-11 14:57  落无一  阅读(21)  评论(0)    收藏  举报