当前位置: 首页 > news >正文

运维web服务器

运维web服务器

Web服务器介绍

‌Web服务器是一种运行于互联网上的计算机硬件或软件,用于存储、处理和传输网页和其他网站内容。‌

它通常运行在服务器上,绑定服务器的IP地址并监听某一个TCP端口,接收来自客户端的请求,然后向客户端发送所请求的网页或相关资源。

Web服务器通常通过HTTP(超文本传输协议)或HTTPS(加密的HTTP)与客户端进行通信,并使用域名系统(DNS)来将网址转换为IP地址,以便正确定位和访问所请求的网页‌。

Web服务器的主要功能

‌接收请求‌:Web服务器监听特定的网络端口,等待客户端发起HTTP请求。一旦收到请求,它会解析请求的内容,包括请求的URL、HTTP方法、请求头等‌。

‌处理请求‌:服务器根据请求的内容,决定如何处理该请求。它可以根据URL路由请求到不同的处理程序或处理逻辑,也可以执行静态文件的读取和发送‌。

生成响应‌:Web服务器根据处理请求的结果,生成HTTP响应。响应包括HTTP状态码、响应头和响应体。响应体可以是HTML页面、JSON数据、文件等‌。

发送响应‌:Web服务器将生成的HTTP响应发送回客户端。它使用网络协议(如TCP/IP)将响应发送给客户端,并确保数据的正确传输‌。

‌保持连接‌:Web服务器可以保持与客户端的持久连接,以便处理多个请求。这可以提高性能和效率,减少网络开销‌。

常用Web服务器

Apache是目前世界上使用最多的Web服务器,市场占有率达60%左右。它是一个开源软件,可以运行在几乎所有的Unix、Linux、Windows系统平台上。Apache的优势在于其开源代码开放,功能丰富,支持动态内容生成、CGI脚本、SSL和TLS等。然而,它也有缺点,即消耗的内存较高‌。

Nginx是一个轻量级的Web服务器,也可以作为反向代理服务器和负载均衡器使用。它具有高性能和高并发处理能力,常用于高流量的网站和服务。Nginx的优点是资源消耗低,适合处理高负载的网站和应用程序‌。

Microsoft IIS是微软公司开发的Web服务器,主要用于Windows操作系统。它提供了强大的特性和控制,如ASP.NET支持、FTP、SMTP、虚拟主机和安全认证等。IIS的特点包括安全性、强大和灵活‌。

Tomcat是一个用于Java应用程序的开源Web服务器,通常与Apache一起使用。它技术先进、性能稳定,深受Java爱好者的喜爱。Tomcat适合运行Java Web应用,具有高性能和稳定性‌。

Lighttpd是一个轻量级的Web服务器,适用于低系统资源的服务器运行环境下。它具有高性能和高可扩展性,适合处理高负载的网站和应用程序。Lighttpd的特点包括快速、安全、内存开销低,可以在多种操作系统上运行‌。

安装tomcat

通过以下命令可以看到系统自带的JDK版本信息,看是否为OpenJDK version,

java -version

查询本机中已经安装过的java rpm包,命令如下;

rpm -qa |grep java
rpm -e --nodeps xx

创建一个java目录

mkdir -p /home/local/java

下载Oracle JDK安装包,解压到对应的文件夹

tar -zxvf jdk-8u271-linux-x64.tar.gz

用vim或vi 打开/etc/profile 文件

vim /etc/profile

添加jdk内容

export JAVA_HOME=/home/local/java/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

重新加载配置文件,命令:

source /etc/profile 

Apache(httpd)和Tomcat对比

共同点:

两者都是Apache组织开发的; 两者都有HTTP服务的功能; 两者都是免费的。

不同点:

Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器。

Apache是一个Web服务器环境程序,启用它可以作为Web服务器使用,不过只支持静态网页,如(ASP,PHP,CGI,JSP)等动态网页的就不行。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页而这个JSP解释器就是Tomcat。

Apache:侧重于HTTPServer,Tomcat:侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想。

Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

实际使用中Apache与Tomcat常常是整合使用:如果客户端请求的是静态页面,则只需要Apache服务器响应请求。

如果客户端请求动态页面,则是Tomcat服务器响应请求。因为JSP是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。可以理解Tomcat为Apache的一种扩展。

Nginx介绍

Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

和apache一样,都是web服务器软件,因为其性能优异,所以被广大运维喜欢。

又因为nginx是一个轻量级的web服务器,相比apache来说资源消耗更低。

延伸版本:tengine(淘宝)、openresrt(章亦春)等

  • nginx 官网

  • http://www.nginx.cn/doc/index.html 中文文档

为什么选择Nginx

Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。

能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。

Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器。

Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。

Nginx和Apache对比

  • 静态文件处理能力:nginx高于apache

  • 资源消耗:nginx优于apache,因为nginx是异步处理模型,只需要几个进程就能够处理大量在线请求,而apache 2.4仍然是进程模型或者线程模型,即仍然采用大量线程来处理大量在线请求。

  • Apache支持的模块很多,而且也比较稳定。而nginx由于出现的比较晚,所以在这方面可能比不上Apache。

  • nginx本身就是一个反向代理服务器,而且支持7层负载均衡。

  • nginx处理动态页面很鸡肋,一般只用与处理静态页面和反向代理。

nginx源码下载

官网:nginx

源码包: nginx-1.19.3.tar.gz

源码包下载: wget http://nginx.org/download/nginx-1.19.3.tar.gz -P /usr/src

nginx安装

2.1、下载nginx源码包
[root@root ~]# wget http://nginx.org/download/nginx-1.19.3.tar.gz -P /usr/src
[root@root src]# cd /usr/src2.2、安装nginx依赖包
[root@root ~]# yum -y install gcc pcre-devel zlib-devel- gcc: 源码编译工具 - pcre-devel: nginx url_rewrite 功能提供包 - zlib-devel: nginx 压缩功能提供包	2.3、解压nginx源码,并进入源码包
[root@root src]# tar xf nginx-1.19.3.tar.gz
[root@root src]# cd nginx-1.19.32.4、配置nginx源码[root@root nginx-1.19.3]# ./configure --prefix=/usr/local/nginx配置目的:1)检查环境 是否 满足安装条件     依赖解决2)指定安装方式    配置文件   命令文件  各种文件放哪里   开启模块功能【内置模块  三方模块】3)指定软件安装在那里2.5、编译nginx源码
[root@root nginx-1.19.3]# make -j42.6、安装nginx
[root@root nginx-1.19.3]# make install

nginx相关目录

nginx path prefix: “/usr/local/nginx”

nginx binary file: “/usr/local/nginx/sbin/nginx”

nginx modules path: “/usr/local/nginx/modules”

nginx configuration prefix: “/usr/local/nginx/conf”

nginx configuration file: “/usr/local/nginx/conf/nginx.conf”

nginx pid file: “/usr/local/nginx/logs/nginx.pid”

nginx error log file: “/usr/local/nginx/logs/error.log”

nginx http access log file: “/usr/local/nginx/logs/access.log”

nginx path prefix: "/usr/local/nginx":这是Nginx安装的基础目录前缀。通常情况下,Nginx的所有相关文件(如二进制文件、配置文件、日志等)都会基于这个基础目录组织。nginx binary file: "/usr/local/nginx/sbin/nginx":这是Nginx的可执行二进制文件的位置。当你需要启动、停止或重新加载Nginx服务时,就是通过这个文件来操作的。nginx modules path: "/usr/local/nginx/modules":这里是Nginx模块存放的地方。Nginx模块用于扩展Nginx的功能,比如增加对某种协议的支持或是添加新的功能特性。nginx configuration prefix: "/usr/local/nginx/conf":这是Nginx配置文件所在的目录前缀。所有与配置相关的文件通常都放在这个目录下。nginx configuration file: "/usr/local/nginx/conf/nginx.conf":这是Nginx的主要配置文件。通过修改这个文件,你可以调整Nginx的工作方式,包括设置服务器块(虚拟主机)、定义端口监听、指定错误页面等。nginx pid file: "/usr/local/nginx/logs/nginx.pid":这是一个存储Nginx主进程ID的文件。在管理Nginx服务时,这个PID文件可能会被用到,例如发送信号给Nginx进程以进行重启或关闭操作。nginx error log file: "/usr/local/nginx/logs/error.log":这是Nginx记录错误信息的日志文件。当Nginx遇到问题时,可以查看此文件来诊断问题。nginx http access log file: "/usr/local/nginx/logs/access.log":这是Nginx记录访问请求的日志文件。它记录了所有客户端请求的信息,是分析网站流量和用户行为的重要数据来源。nginx http client request body temporary files: "client_body_temp":这是Nginx处理客户端请求体时使用的临时文件目录。如果请求体较大,Nginx会将这部分数据暂时存储在这个目录下的文件中。

nginx相关命令

命令描述
/usr/local/nginx/sbin/nginx启动 Nginx 服务
/usr/local/nginx/sbin/nginx -s stop快速关闭 Nginx(立即停止)
/usr/local/nginx/sbin/nginx -s quit正常关闭 Nginx(等待工作进程完成当前任务后关闭)
/usr/local/nginx/sbin/nginx -s reload在不中断服务的情况下重新加载配置文件
/usr/local/nginx/sbin/nginx -t测试配置文件语法,但不启动服务器
/usr/local/nginx/sbin/nginx -t -c /path/to/nginx.conf使用指定的配置文件测试语法
/usr/local/nginx/sbin/nginx -v查看 Nginx 版本信息

添加自定义nginx.service文件,用systemctl启动服务

手动创建nginx.service服务文件。并将其放入 /lib/systemd/system 文件夹中。

PID文件是一个存储进程标识符(Process ID,简称PID)的文本文件,通常用于守护进程(后台服务程序)。

当一个服务启动时,它会将自己的进程ID写入到一个指定的PID文件中。

这个文件通常位于系统的/var/run/目录下或者在服务自身的安装或配置目录内。

vim /usr/lib/systemd/system/nginx.service[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target

注意上面的ExecStart/ExecReload/ExecStop 必须以自己的为主

说明Description:描述服务
After:描述服务类别[Service]服务运行参数的设置
Type=forking	是后台运行的形式
ExecStart		为服务的具体运行命令
ExecReload		为重启命令
ExecStop		为停止命令
PrivateTmp=True	表示给服务分配独立的临时空间注意:[Service]的启动、重启、停止命令全部要求使用绝对路径[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3systemctl start nginx.service (启动nginx服务)
systemctl stop nginx.service (停止nginx服务)
systemctl enable nginx.service (设置开机自启动)
systemctl disable nginx.service (停止开机自启动)
systemctl status nginx.service (查看服务当前状态)
systemctl restart nginx.service (重新启动服务)
systemctl list-units --type=service (查看所有已启动的服务)

完成tomcat的systemctl配置

[Unit]
Description=Tomcat
After=network.target[Service]
Type=forking
Environment="JAVA_HOME=/home/local/java/jdk1.8.0_151"
PIDFile=/home/local/java/apache-tomcat-9.0.105/logs/catalina.pid
ExecStart=/home/local/java/apache-tomcat-9.0.105/bin/catalina.sh start
ExecStop=/home/local/java/apache-tomcat-9.0.105/bin/catalina.sh stop[Install]
WantedBy=multi-user.target

tomcat没有自带的pid文件,需要找到 catalina.sh 文件,添加内容:

# 设置PID文件位置
CATALINA_PID="/home/local/java/apache-tomcat-9.0.105/logs/catalina.pid"

更新 tomcat.service 配置

[Unit]
Description=Tomcat
After=network.target[Service]
Type=forking
Environment="JAVA_HOME=/home/local/java/jdk1.8.0_151"
PIDFile=/home/local/java/apache-tomcat-9.0.105/logs/catalina.pid
ExecStart=/home/local/java/apache-tomcat-9.0.105/bin/catalina.sh start
ExecStop=/home/local/java/apache-tomcat-9.0.105/bin/catalina.sh stop
Restart=on-failure[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl restart tomcat

==如有错误可以尝试删除pid文件==

nginx启动测试

nginx安装完毕,接下来就可以启动nginx了,nginx启动后如何测试nginx的启动状态呢?

可以通过以下三种方式去测试,这个可以根据自己的习惯选择一种测试就行了。

使用netsata命令查看启动端口
[root@root ~]# netstat –ntpl使用losf命令查看启动端口
[root@root ~]# lsof -i :80使用文本浏览器访问nginx默认网站
[root@root ~]# curl http://IP

nginx配置文件

nginx的配置文件是用于定义nginx服务器行为的关键文件,它包含了多个区块和指令,用于控制如何响应客户端的请求。

序号指令名称所属配置块描述说明
1http主配置块设置影响整个 Nginx HTTP 服务的全局参数
2serverhttp 块内定义一个虚拟主机(站点),包括监听端口、域名等
3locationserver 块内匹配 URL 路径并定义处理方式,如静态文件、代理、重定向等
4upstreamhttp 块内定义后端服务器组,用于负载均衡和故障转移
5events主配置块设置 Nginx 的事件处理模型,如连接数限制、多路复用机制等
6http2server 块内开启或关闭对 HTTP/2 协议的支持
7gziphttp/server 块启用或配置 Gzip 压缩以减小传输体积
8access_loghttp/server/location 块定义访问日志路径及格式
9error_loghttp/server 块定义错误日志路径及级别
10proxy_passlocation/upstream 块将请求转发到指定的后端服务器(反向代理)
11root / aliaslocation/server 块指定静态文件根目录(root 和 alias 行为不同)
12indexhttp/server/location 块定义默认索引文件名(如 index.html)
13client_max_body_sizehttp/server/location 块限制客户端请求体的最大大小(常用于上传限制)
14keepalive_timeouthttp/server 块设置长连接超时时间
15cachehttp/server/location 块设置缓存策略,如缓存目录、缓存时间等
16rewriteserver/location 块实现 URL 重写规则,可用于 SEO 或跳转逻辑
17returnserver/location 块直接返回指定的 HTTP 状态码和可选的重定向地址
18try_fileslocation 块内检查文件是否存在,如果不存在则尝试其他路径或执行内部跳转
19error_pagehttp/server/location 块自定义特定状态码的错误页面(如 404、500 页面)
20load_module主配置块加载动态模块(Nginx 1.9.11+ 支持动态模块加载)
21worker_processes主配置块设置 Nginx 工作进程数量,通常设为 CPU 核心数
22worker_connectionsevents 块内设置每个工作进程最大并发连接数
23sendfilehttp/server/location 块启用或关闭高效的文件传输模式(适合静态文件加速)

以上只是nginx配置文件中常见的一部分选项和指令。

nginx的配置非常灵活,可以根据实际需求进行调整和优化。

在修改配置文件之前,建议先备份原始文件,以防出现不可预料的问题。

同时,每次修改配置文件后需要重新加载或重启nginx服务使更改生效。

以下是一个简单完整的nginx配置文件示例:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections 1024;
}http {gzip on;gzip_types text/plain text/css application/json application/javascript;server {listen 80;server_name example.com;root /var/www/html;index index.html;location / {try_files $uri $uri/ =404;}location /api {proxy_pass http://backend;}error_page 404 /404.html;error_page 500 502 503 504 /50x.html;}upstream backend {server backend1.example.com;server backend2.example.com;}
}

这个配置文件包含了一个简单的HTTP服务器,监听在80端口上。它使用gzip压缩来减少传输文件的大小。

服务器的根目录是/var/www/html,默认索引文件是index.html

当请求的URL匹配到/api时,会将请求转发到名为backend的后端服务器组。

同时,它还定义了自定义的错误页面,用于处理404和5xx错误。

默认网站

server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;#支持目录浏览autoindex  on;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

访问控制

location /a {autoindex on;allow 192.168.66.0/24;deny all;#基于客户端IP做过滤,符合条件的允许访问,不符合的返回404;if ( $remote_addr !~ "192.168.66.138" ) {#return 404;return http://www.baidu.com;}}

登陆验证

location /c {auth_basic "登陆验证";auth_basic_user_file /etc/nginx/htpasswd;
}

为了设置这个文件,你需要使用一个叫做 htpasswd 的工具,它是 Apache 软件基金会提供的一个实用程序,但也可以与 Nginx 一起使用。

sudo yum install httpd-tools

安装 htpasswd 工具

sudo yum install httpd-tools

使用 htpasswd 命令来创建一个新的 htpasswd 文件并添加用户。

创建一个新文件(如果文件不存在)并将名为 username 的用户的加密密码添加到 /etc/nginx/htpasswd 文件中。

sudo htpasswd -c /etc/nginx/htpasswd username

日志管理

Nginx访问日志主要有两个参数控制

log_format #用来定义记录日志的格式(可以定义多种日志格式,取不同名字即可)

access_log #用来指定日至文件的路径及使用的何种日志格式记录日志

access_log logs/access.log main;

log_format格式变量:$remote_addr  #记录访问网站的客户端地址$remote_user  #远程客户端用户名$time_local  #记录访问时间与时区$request  #用户的http请求起始行信息$status  #http状态码,记录请求返回的状态码,例如:200、301、404等$body_bytes_sent  #服务器发送给客户端的响应body字节数$http_referer  #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。$http_user_agent  #记录客户端访问信息,例如:浏览器、手机客户端等$http_x_forwarded_for  #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置

自定义一个json格式的访问日志

log_format main_json '{"@timestamp":"$time_local",'
'"client_ip": "$remote_addr",'
'"request": "$request",'
'"status": "$status",'
'"bytes": "$body_bytes_sent",'
'"x_forwarded": "$http_x_forwarded_for",'
'"referer": "$http_referer"'
'}';
access_log logs/access_json.log main_json;

防盗链

location /images/ {alias /usr/local/nginx/html/img/;valid_referers none blocked *.baidu.com;if ($invalid_referer) {rewrite ^/ http://192.168.66.146/b.jpeg;#return 403;}
}
http://www.xdnf.cn/news/561457.html

相关文章:

  • Java—— IO流 第二期
  • 怎么把cursor(Cursor/ollama)安装到指定路径
  • 从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级
  • 软考 测试 静态测试 动态测试
  • 2025ICPC南昌邀请赛流水账
  • 有理函数积分的一般方法
  • Data Vault 2.0:企业数据建模的现代方法
  • IDEA推送到gitlab,jenkins识别,然后自动发布到需要的主机
  • 【Django】Django DRF 中如何手动调用分页器返回分页数据(APIView,action场景)
  • eclipse 生成函数说明注释
  • 手术机器人行业新趋势:Kinova多机械臂协同系统如何突破复杂场景适应性瓶颈?
  • Idea 查找引用jar包依赖来源的Maven pom坐标
  • 实践大模型提示工程(Prompt Engineering)
  • 01. C#入门系列【你的第一个程序】从Hello World开始
  • 智能驾驶中的深度学习:基于卷积神经网络的车道线检测
  • Linux:进程信号---信号的保存与处理
  • docker使用
  • SRS流媒体服务器,配置国标协议对接和HTTPS视频流输出功能
  • 孤岛检测应用背景及实现原理
  • 解决Query Error: [S1000][15233] 无法添加属性。‘dbo.xxx.area_ids‘ 已存在属性‘MS_Description‘。
  • PaddleOCR的Pytorch推理模块
  • 每日算法-250521
  • RISC-V IDE MRS2 开发笔记一:volatile关键字的使用
  • ArcGIS Pro 3.4 二次开发 - Arcade
  • react中运行 npm run dev 报错,提示vite.config.js出现错误 @esbuild/win32-x64
  • vue项目启动报错(node版本与Webpack)
  • 创建Workforce
  • Apollo10.0学习——cyber常用指令
  • windows7安装node18
  • DeepSeek源码解构:从MoE架构到MLA的工程化实现