LINUX中TOMCAT安装和Nginx源码安装
一:web服务器
1、Web服务器介绍
Web服务器是一种运行于互联网上的计算机硬件或软件,用于存储、处理和传输网页和其他网站内容。
它通常运行在服务器上,绑定服务器的IP地址并监听某一个TCP端口,接收来自客户端的请求,然后向客户端发送所请求的网页或相关资源。
Web服务器通常通过HTTP(超文本传输协议)或HTTPS(加密的HTTP)与客户端进行通信,并使用域名系统(DNS)来将网址转换为IP地址,以便正确定位和访问所请求的网页。
1.2、Web服务器的主要功能
接收请求:Web服务器监听特定的网络端口,等待客户端发起HTTP请求。一旦收到请求,它会解析请求的内容,包括请求的URL、HTTP方法、请求头等。
处理请求:服务器根据请求的内容,决定如何处理该请求。它可以根据URL路由请求到不同的处理程序或处理逻辑,也可以执行静态文件的读取和发送。
生成响应:Web服务器根据处理请求的结果,生成HTTP响应。响应包括HTTP状态码、响应头和响应体。响应体可以是HTML页面、JSON数据、文件等。
发送响应:Web服务器将生成的HTTP响应发送回客户端。它使用网络协议(如TCP/IP)将响应发送给客户端,并确保数据的正确传输。
保持连接:Web服务器可以保持与客户端的持久连接,以便处理多个请求。这可以提高性能和效率,减少网络开销。
1.3、常用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
将1.7和1.8都卸载了
第三步:下载jdk
这是网址:Index of java-local/jdk
创建一个java安装目录
mkdir -p /usr/local/jdk-- 进入目录
cd /usr/local/jdk
解压jdk压缩包:
tar -zxvf jdk-8u151-linux-x64.tar.gz
再进行下列图片操作:
第四步:配置环境变量
所有的系统环境变量配置(etc/profile)
vim /etc/profile
添加jdk内容
export JAVA_HOME=对应的地址
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
重新加载配置文件,命令:
source /etc/profile
第五步:创建tomcat存放文件夹
mkdir -p /usr/local/tomcatcd /usr/local/tomcat
解压压缩包:
tar -zxvf apache-tomcat-9.0.105.tar.gz
cd apache-tomcat-9.0.105.tar.gz
ll
创建自己的项目文件夹
cd webappsmkdir sharecd share
在share文件夹放入一张图片
wget 图片路径或者使用拖拽形式
进入bin目录,来启动tomcat
cd ..
cd ..
cd bin
第六步:启动tomcat
./startup.sh
再关闭防火墙:
systemctl stop firewalld
同样的之前下载的图片也可以看到
下载Oracle JDK安装包,解压到对应的文件夹
tar -zxvf+对应的版本
用vim或vi 打开/etc/profile 文件 profile 是系统环境变量配置 /etc是所有的配置文件
vim /etc/profile
重新加载配置文件,命令:
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的一种扩展。
1、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 中文文档
2、为什么选择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不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。
3、Nginx和Apache对比
-
静态文件处理能力:nginx高于apache
-
资源消耗:nginx优于apache,因为nginx是异步处理模型,只需要几个进程就能够处理大量在线请求,而apache 2.4仍然是进程模型或者线程模型,即仍然采用大量线程来处理大量在线请求。
-
Apache支持的模块很多,而且也比较稳定。而nginx由于出现的比较晚,所以在这方面可能比不上Apache。
-
nginx本身就是一个反向代理服务器,而且支持7层负载均衡。
-
nginx处理动态页面很鸡肋,一般只用与处理静态页面和反向代理。
4、nginx源码下载nginx安装
官网:nginx
源码包: nginx-1.19.3.tar.gz
源码包下载: wget http://nginx.org/download/nginx-1.19.3.tar.gz -P /usr/src
第一步:创建一个专门存放nginx的文件夹
mkdir /usr/local/nginxcd ~
打开素材选择nginx安装包拖进去
第二步:解压文件 进入nginx目录
tar -zxvf nginx-1.27.5.tar.gzllcd nginx-1.27.5
第三步:下载编译
-- 下载编译工具gcc
yum -y install gcc pcre-devel zlib-devel
第四步:指定安装路径
./configure --prefix=/usr/local/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 http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
第五步:编译源码
make
第六步:编译安装nginx
make install
第七步:启动nginx并测试
cd /usr/local/nginxllcd sbin-- 启动nginx
./nginx-- 测试是否启动
curl localhost
第八步:将配置文件通过软连接的方式
命令 | 描述 |
/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 版本信息 |
ln -s /usr/local/nginx/sbin/nginx /bin
这里就你不用再跑到nginx的sbin目录底下再去执行
-- 测试软连接是否成功
cd /nginx -s stopcurl localhost
第九步:编写服务配置文件
cd /usr/lib/systemd/system-- 编写nginx服务文件
vim nginx.service-- 将下面的配置信息放入,记得把注释删了
[Unit]
Description=nginx nginx信息介绍
After=network.target 启动时间(这里是在网络启动之后,再启动)[Service] 服务文件信息
Type=forking 后台运行
PIDFile=/usr/local/nginx/logs/nginx.pid 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
测试:
systemctl start nginx
systemctl status nginx
4.1、nginx启动测试
nginx安装完毕,接下来就可以启动nginx了,nginx启动后如何测试nginx的启动状态呢?
可以通过以下三种方式去测试,这个可以根据自己的习惯选择一种测试就行了。
使用netsata命令查看启动端口
[root@root ~]# netstat –ntpl使用losf命令查看启动端口
[root@root ~]# lsof -i :80使用文本浏览器访问nginx默认网站
[root@root ~]# curl http://IP
4.2 nginx配置
cd /usr/local/nginx/conf-- 复制nginx配置文件
cp nginx.conf nginx.conf.bak-- 编辑配置文件
vim nginx.conf-- 在文件中找到下面这个部分,将注释那句话加进去
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;}}-- 返回上一级目录
cd ..cd htmlllmv index.html a.htmlsystemctl restart nginx-- 再将虚拟机的ip放到浏览器去
4.3 访问控制
vim /usr/local/nginx/conf/nginx.conflocation /a {autoindex on;allow 192.168.201.1/24;deny all;#基于客户端IP做过滤,符合条件的允许访问,不符合的去百度;if ( $remote_addr !~ "192.168.201.128" ) {#return 404;return http://www.baidu.com;}}cd /usr/local/nginx/htmlmv index.html a.htmlcp a.html b.html
4.4 登陆验证
vim /usr/local/nginx/conf/nginx.conflocation /c {auth_basic "登陆验证";auth_basic_user_file /etc/nginx/htpasswd;autoindex on;
}cd /usr/local/nginx/htmlmkdir c.txtcd c.txttouch a.txt
安装 htpasswd 工具
sudo yum install httpd-tools
使用 htpasswd
命令来创建一个新的 htpasswd 文件并添加用户。
创建一个新文件(如果文件不存在)并将名为 username
的用户的加密密码添加到 /etc/nginx/htpasswd
文件中。
mkdir -p /etc/nginxsudo htpasswd -c /etc/nginx/htpasswd username
设置密码:
4.5日志管理
Nginx访问日志主要有两个参数控制
log_format #用来定义记录日志的格式(可以定义多种日志格式,取不同名字即可)
access_log #用来指定日至文件的路径及使用的何种日志格式记录日志
access_log logs/access.log main;
192.168.201.1 - 远程ip的网关
username 远程的用户
[23/May/2025:16:54:12 +0800] 时间
"GET /c.txt/ HTTP/1.1" 请求的信息
200 269 响应码
"http://192.168.201.128/" ip"Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) 浏览器信息
Chrome/136.0.0.0Safari/537.36 Edg/136.0.0.0"
也可以自己设置日志格式
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; 日志文件名
4.6 防盗链
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;}
}