【网络运维】Linux:常见 Web 服务器
常见 WEB 服务器
WEB 服务器简介
WEB也称为WWW(WORLD WIDE WEB),中文名字为万维网、全球信息网等,主要功能是提供网上信息浏览服务。Web服务器可以为Internet上的用户提供WWW、Email和FTP等各种Internet服务。
WEB起源于1989年3月,伯纳斯-李 (Tim Berners-Lee) 为了更有效率地让欧洲核物理实验室的科学家可以分享及更新他们的研究成果, 于是他开发出超文件传输协议(Hyper Text Transport Protocol, HTTP)。为了让 HTTP 这个协议得以顺利的应用,大约在90 年代初期,由伊利诺大学的国家超级计算机应用中心 开发出了HTTPd (HTTP daemon )服务器,也就是后来的Apache。
常见的WEB服务器,除了Apache,还有一些Nginx,Lighttpd,IIS等。
本文主要介绍Nginx服务器和Tomcat服务器的配置与应用。
Nginx
Nginx是一款高性能的HTTP和反向代理服务器,能够选择高效的epoll、kqueue、eventport最为网络I/O模型,在高连接并发的情况下,能够支持高达5万个并发连接数的响应,而内存、CPU等系统资源消耗却非常低,运行非常稳定。
安装 nginx
# 安装 nginx
[root@server ~]# yum -y install nginx# 启动 nginx
[root@server ~]# systemctl enable nginx --now# 准备主页
[root@server ~]# mv /usr/share/nginx/html/index.html{,.ori}
[root@server ~]# echo Hello World From Nginx > /usr/share/nginx/html/index.html# 防火墙
[root@server ~]# firewall-cmd --add-service=http --permanent
[root@server ~]# firewall-cmd --reload[root@client ~]# curl http://www.furongwang.cloud
# windows客户端修改C:\Windows\System32\drivers\etc\hosts
# Linux或Unix修改 /etc/hosts
# 添加如下记录
10.1.8.10 www.furongwang.cloud
启用 UserDir
# 配置 nginx
[root@server ~]# vim /etc/nginx/nginx.conf
# add into [server] section
server {location ~ ^/~(.+?)(/.*)?$ {alias /home/$1/public_html$2;index index.html index.htm;}
}
[root@server ~]# systemctl restart nginx# If SELinux is enabled, change boolean setting.
[root@server ~]# setsebool -P httpd_enable_homedirs on# Create a test page with a common user to make sure it works normally.
[furongwang@server ~]$ chmod 711 /home/furongwang
[furongwang@server ~]$ mkdir ~/public_html
[furongwang@server ~]$ chmod 755 ~/public_html
[furongwang@server ~]$ vim ~/public_html/index.html
<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: furongwanger;">
Nginx UserDir Test Page
</div>
</body>
</html># 测试
[root@client ~]# curl http://www.furongwang.cloud/~furongwang/
虚拟主机
同一个web服务器提供多个站点。
根据名称
[root@server ~]# vim /etc/nginx/conf.d/vhost-name.conf
server {server_name web1.furongwang.cloud;root /usr/share/nginx/web1;
}
server {server_name web2.furongwang.cloud;root /usr/share/nginx/web2;
}
- 要在Windows访问网页,需要在hosts文件添加10.1.8.10 web1.furongwang.cloud(web2同理)
根据 port
[root@server ~]# vim /etc/nginx/conf.d/vhost-port.conf
server {listen 8081;server_name www.furongwang.cloud;root /usr/share/nginx/8081;
}
server {listen 8082;server_name www.furongwang.cloud;root /usr/share/nginx/8082;
}
配置SSL/TLS
生成证书
#--1--生成私钥
[root@server ~]# openssl genrsa -out www.key 2048 #--2--生成请求文件csr
[root@server ~]# openssl req -new -key www.key -out www.csr -subj "/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.furongwang.cloud/emailAddress=furongwang@furongwang.cloud"
#CN的值必须是网站域名 #--3--使用自己的私钥对请求文件签名,以生成证书
[root@server ~]# openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt
配置站点
[root@server ~]# mkdir /etc/ssl/certs/www.furongwang.cloud
[root@server ~]# mv www* /etc/ssl/certs/www.furongwang.cloud
[root@server ~]# vim /etc/nginx/conf.d/ssl.conf
server {listen 443 ssl http2 default_server;listen [::]:443 ssl http2 default_server;server_name www.furongwang.cloud;root /usr/share/nginx/html;# 证书ssl_certificate "/etc/ssl/certs/www.furongwang.cloud/www.crt";# 私钥ssl_certificate_key "/etc/ssl/certs/www.furongwang.cloud/www.key";
}[root@server ~]# systemctl restart nginx# 配置HTTP重定向到https.
[root@server ~]# vim /etc/nginx/nginx.confserver {listen 80 default_server;listen [::]:80 default_server;server_name www.furongwang.cloud;root /usr/share/nginx/html;# 添加 重定向return 301 https://$host$request_uri;}
[root@server ~]# systemctl restart nginx# 防火墙设置
[root@server ~]# firewall-cmd --add-service=https --permanent
[root@server ~]# firewall-cmd --reload# 测试
[root@client ~]# curl http://www.furongwang.cloud/
[root@client ~]# curl -k https://www.furongwang.cloud/
配置基本认证
用户名和密码使用plain text发送,所以最好配置SSL/TLS。
#安装工具
[root@server ~]# yum -y install httpd-tools
[root@server ~]# vim /etc/nginx/conf.d/ssl.conf
# add into the [server] section
server {.....location /auth-basic/ {auth_basic "Basic Auth";auth_basic_user_file "/etc/nginx/.htpasswd";}
}[root@server ~]# systemctl restart nginx# add user for Basic authentication
[root@server ~]# htpasswd -c /etc/nginx/.htpasswd furongwang
New password:
Re-type new password:
Adding password for user furongwang# create a test page
[root@server ~]# mkdir /usr/share/nginx/html/auth-basic
[root@server ~]# vim /usr/share/nginx/html/auth-basic/index.html
<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: furongwanger;">
Test Page for Basic Authentication
</div>
</body>
</html># 测试
[root@client ~]# curl http://www.furongwang.cloud/auth-basic/
支持动态脚本
使用 PHP
# 安装PHP和php-fpm,建议把其他的扩展包一起安装
[root@server ~]# yum install -y php php-fpm# 建议把其他的扩展包一起安装
[root@server ~]# yum install -y php-gd php-common php-pear php-mbstring php-mcrypt# 查看 php 版本
[root@server ~]# php -v# 测试 php 是否正常
[root@server ~]# echo "<?php echo 'PHP Test Page'.\"\n\"; ?>" > php_test.php
[root@server ~]# php php_test.php
PHP Test Page# 准备测试页,使用phpinfo查看详细信息
[root@server ~]# echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php # 测试
[root@client ~]# curl http://www.furongwang.cloud/info.php
使用 FastCGI
# install from EPEL
[root@server ~]# yum install -y fcgiwrap
[root@server ~]# vim /etc/nginx/fcgiwrap.conf
# for example, enable CGI under [/cgi-bin]
location /cgi-bin/ {gzip off;root /usr/share/nginx;fastcgi_pass unix:/var/run/fcgiwrap.socket;include /etc/nginx/fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}[root@server ~]# mkdir -m 755 /usr/share/nginx/cgi-bin
[root@server ~]# vim /etc/nginx/conf.d/ssl.conf
# add settings into [server] section of a site definitionserver {.....include fcgiwrap.conf;
}[root@server ~]# systemctl restart nginx
# Create Systemd file for FastCGI Wrap service and Start them.
[root@server ~]# vim /usr/lib/systemd/system/fcgiwrap.service
[Unit]
Description=Simple CGI Server
After=nss-user-lookup.target
Requires=fcgiwrap.socket[Service]
EnvironmentFile=/etc/sysconfig/fcgiwrap
ExecStart=/usr/sbin/fcgiwrap ${DAEMON_OPTS} -c ${DAEMON_PROCS}
User=nginx
Group=nginx[Install]
Also=fcgiwrap.socket
[root@server ~]# vim /usr/lib/systemd/system/fcgiwrap.socket
[Unit]
Description=fcgiwrap Socket[Socket]
ListenStream=/run/fcgiwrap.socket[Install]
WantedBy=sockets.target
[root@server ~]# systemctl enable --now fcgiwrap# If SELinux is enabled, change policy.
[root@server ~]# vim nginx-www.te
module nginx-server 1.0;require {type httpd_t;type var_run_t;class sock_file write;
}#============= httpd_t ==============
allow httpd_t var_run_t:sock_file write;[root@server ~]# checkmodule -m -M -o nginx-server.mod nginx-server.techeckmodule: loading policy configuration from nginx-server.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 19) to nginx-server.mod
[root@server ~]# semodule_package --outfile nginx-server.pp --module nginx-server.mod[root@server ~]# semodule -i nginx-server.pp
测试
# 准备测试文件
# Create a test scripts with a language (example below is Python3) under the directory you set CGI executable ([/usr/share/nginx/cgi-bin] on this example) and Access to it to verify CGI works normally.
[root@server ~]# vim /usr/share/nginx/cgi-bin/index.cgi
#!/usr/bin/python3
print("Content-type: text/html\n")
print("<html>\n<body>")
print("<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: furongwanger;\">")
print("CGI Script Test Page")
print("</div>")
print("</body>\n</html>")[root@server ~]# chmod 755 /usr/share/nginx/cgi-bin/index.cgi # 测试
[root@client ~]# curl http://www.furongwang.cloud/cgi-bin/index.cgi
部署反向代理
客户端访问代理服务器,代理服务器会将客户端请求发送给真实服务器。
反向代理实现了隐藏内部服务器。
角色说明
-
代理服务器 proxy 10.1.8.20
-
真实服务器 server 10.1.8.10
代理服务器配置
# 配置解析
[root@proxy ~]# echo '10.1.8.10 www.furongwang.cloud' >> /etc/hosts# 安装 nginx
[root@proxy ~]# yum -y install nginx# 启动 nginx
[root@proxy ~]# systemctl enable --now nginx# 防火墙
[root@proxy ~]# firewall-cmd --add-service=http --permanent
[root@proxy ~]# firewall-cmd --reload# 配置代理,server部分更改如下
[root@proxy ~]# vim /etc/nginx/nginx.conf
# change [server] section like followsserver {listen 80 default_server;listen [::]:80 default_server;server_name _;root /usr/share/nginx/html;#添加如下内容proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;......#新增 location 规则location /proxy/ {proxy_pass http://www.furongwang.cloud/;}}
[root@proxy ~]# systemctl restart nginx# If SELnux is enabled, change boolean setting.
[root@proxy ~]# setsebool -P httpd_can_network_connect on
真实服务器配置
# 安装nginx
[root@server ~]# yum -y install nginx# 启动nginx
[root@server ~]# systemctl enable --now nginx# 防火墙
[root@server ~]# firewall-cmd --add-service=http --permanent
[root@server ~]# firewall-cmd --reload# 准备测试页
[root@server ~]# echo hello furongwang > /usr/share/nginx/html/test.html# 测试效果
[root@client ~]# curl http://www.furongwang.cloud/test.html
Tomcat
Tomcat 由来
最初是由Sun公司詹姆斯·邓肯·戴维森开发的,后来他将其变为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目O’Reilly都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为Tomcat(英语公猫或其他雄性猫科动物)。而O’Reilly出版的介绍Tomcat的书籍(ISBN 0-596-00318-8)[1]的封面也被设计成了一个公猫的形象。而Tomcat的Logo兼吉祥物也被设计为一只公猫。
Tomcat 介绍
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和用户并发访问不多的场合下使用,是开发和调试JSP 程序的首选。因为Tomcat技术先进、性能稳定而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。
Tomcat 不仅仅是一个Java容器,同时也具有传统的Web服务器的功能:处理HTML页面,但是与Apache/Nginx 相比,其处理静态HTML的能力不如Apache/Nginx。通常将Tomcat和Apache/Nginx集成到一起,让Apache/Nginx处理静态HTML,让Tomcat处理JSP和Java。
JSP全名为Java Server Pages,中文名叫java服务器页面,是一个简化的Servlet设计,由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
官方网站:http://tomcat.apache.org/
Tomcat 虽然可以跑 jsp 网页,通常不会使用它作为web服务器,而是作为中间件。
Tomcat 部署
# 安装tomcat,会自动安装java-1.8.0-openjdk-headless
[root@server ~]# yum install -y tomcat# 验证版本
[root@server ~]# java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)# 启动tomcat
[root@server ~]# systemctl enable --now tomcat.service# tomcat 默认发布目录是 /var/lib/tomcats/webapps
[root@server ~]# grep ^TOMCATS_BASE /etc/tomcat/tomcat.conf
TOMCATS_BASE="/var/lib/tomcats/"
[root@server ~]# grep appBase /etc/tomcat/server.xml <Host name="localhost" appBase="webapps"# 准备测试页面
[root@server ~]# cd /var/lib/tomcat/webapps/
[root@www webapps]# mkdir test
[root@www webapps]# vim test/index.jsp
<html><head><title>第一个 JSP 程序</title></head><body><%out.println("Hello World!");%></body>
</html># 测试
[root@server ~]# curl http://www.furongwang.cloud:8080/test/index.jsp
管理界面
# 安装管理页面
[root@server ~]# yum install -y tomcat-webapps tomcat-admin-webapps# 安装在线文档--可选
[root@server ~]# yum install -y tomcat-docs-webapp
如果服务器没有图形化,则安装以下软件包
yum install -y mesa-dri-drivers libglvnd-glx xorg-x11-xauth firefox
# 添加 root 用户
[root@server ~]# vim /etc/tomcat/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
......
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="root" password="root" roles="manager-gui,admin-gui"/>
</tomcat-users># 重启tomcat服务器
[root@www tomcat]# systemctl restart tomcat
进入管理界面
管理界面默认只能从tomcat本地访问 http://localhost:8080