Orange的运维学习日记--39.Nginx详解与服务部署
Orange的运维学习日记–39.Nginx详解与服务部署
文章目录
- Orange的运维学习日记--39.Nginx详解与服务部署
- 简介
- 常见服务器
- Apache
- Nginx
- Lighttpd
- Tomcat
- IIS
- Nginx 安装与深度配置
- 安装 nginx
- 启用 UserDir
- 虚拟主机
- 基于域名
- 基于端口
- 配置 SSL/TLS
- 生成自签名证书
- 部署证书
- 配置基本认证
- 支持动态脚本
- PHP
- FastCGI
- 部署反向代理
- 角色说明
- 代理服务器配置
- 真实服务器配置
- 真实服务器配置
简介
Web 也称为 WWW(World Wide Web)中文名为万维网 主要功能是提供在线信息浏览服务
Web 服务器可以为 Internet 用户提供 WWW、Email、FTP 等多种网络服务
常见服务器
Apache
Apache HTTP Server 是世界上应用最广泛的 Web 服务器
开放源码、跨平台、模块丰富 支持动态模块加载和多种语言运行环境
属于重量级产品 在高并发场景下速度和性能不及轻量级服务器 内存开销也较高
Nginx
Nginx 是高性能 HTTP 和反向代理服务器 使用 epoll、kqueue、eventport 等高效 I/O 模型
在高并发场景下可支持 5 万以上并发连接 系统资源消耗低 运行稳定
同时内置负载均衡、缓存、限流等功能 适合高性能站点部署
Lighttpd
Lighttpd 是针对高性能网站设计的轻量级 Web 服务器
内存开销低、CPU 占用率低 模块丰富 支持 FastCGI、CGI、Auth、输出压缩、URL 重写及 Alias
适合小型或中型网站对资源消耗有严格要求的场景
Tomcat
Tomcat 是开源的 Java Web 应用容器 实现 Servlet 和 JSP 规范
符合 Apache-Jakarta 规范 对 Java Web 应用支持友好
对静态文件和高并发处理能力相对较弱 适合纯 Java 应用环境
IIS
Internet Information Services(IIS)是 Microsoft 提供的 Web 平台
包含 Web、FTP、NNTP、SMTP 等服务 提供图形化管理工具与 ISAPI 接口
支持数据库连接器 方便在 Windows 平台上快速搭建企业级网站
Nginx 安装与深度配置
安装 nginx
yum install -y nginx
systemctl enable --now nginx
-
准备默认主页
mv /usr/share/nginx/html/index.html{,.ori} echo Hello World From Nginx > /usr/share/nginx/html/index.html
-
防火墙放行 HTTP
firewall-cmd --add-service=http --permanent firewall-cmd --reload
-
客户端测试
-
修改 hosts 文件 指向到 Nginx 服务器
10.1.8.10 www.laoma.cloud
-
执行 curl
curl http://www.laoma.cloud
-
启用 UserDir
在用户主目录下提供个人网站访问
-
修改主配置
server {location ~ ^/~(.+?)(/.*)?$ {alias /home/$1/public_html$2index index.html index.htm} }
-
重启服务 并开启 SELinux 主目录支持
systemctl restart nginx setsebool -P httpd_enable_homedirs on
-
准备测试页面
chmod 711 /home/laoma mkdir -m 755 /home/laoma/public_html cat > /home/laoma/public_html/index.html << EOF <html><body><div style="width:100%;font-size:40px;font-weight:bold;text-align:center">Nginx UserDir Test Page</div></body> </html> EOF
-
访问测试
curl http://www.laoma.cloud/~laoma/
虚拟主机
基于域名
server {server_name web1.laoma.cloudroot /usr/share/nginx/web1
}
server {server_name web2.laoma.cloudroot /usr/share/nginx/web2
}
基于端口
server {listen 8081server_name www.laoma.cloudroot /usr/share/nginx/8081
}
server {listen 8082server_name www.laoma.cloudroot /usr/share/nginx/8082
}
配置 SSL/TLS
生成自签名证书
openssl genrsa -out www.key 2048
openssl req -new -key www.key -out www.csr -subj "/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.laoma.cloud/emailAddress=laoma@laoma.cloud"
openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt
部署证书
-
创建目录 并移动证书文件
mkdir -p /etc/ssl/certs/www.laoma.cloud mv www.key www.crt /etc/ssl/certs/www.laoma.cloud
-
配置 HTTPS 站点
server {listen 443 ssl http2 default_serverlisten [::]:443 ssl http2 default_serverserver_name www.laoma.cloudroot /usr/share/nginx/htmlssl_certificate /etc/ssl/certs/www.laoma.cloud/www.crtssl_certificate_key /etc/ssl/certs/www.laoma.cloud/www.key }
-
HTTP 重定向到 HTTPS
server {listen 80 default_serverlisten [::]:80 default_serverserver_name www.laoma.cloudreturn 301 https://$host$request_uri }
-
防火墙放行 HTTPS
firewall-cmd --add-service=https --permanent firewall-cmd --reload
-
测试
curl http://www.laoma.cloud curl -k https://www.laoma.cloud
配置基本认证
-
安装工具
yum install -y httpd-tools
-
在 SSL 服务器配置中添加
location /auth-basic/ {auth_basic "Basic Auth"auth_basic_user_file /etc/nginx/.htpasswd }
-
重启 Nginx 并创建用户
systemctl restart nginx htpasswd -c /etc/nginx/.htpasswd laoma
-
准备测试页面
mkdir -p /usr/share/nginx/html/auth-basic cat > /usr/share/nginx/html/auth-basic/index.html << EOF <html><body><div style="width:100%;font-size:40px;font-weight:bold;text-align:center">Test Page for Basic Authentication</div></body> </html> EOF
-
测试访问
curl http://www.laoma.cloud/auth-basic/
支持动态脚本
PHP
yum install -y php php-fpm php-gd php-common php-pear php-mbstring php-mcrypt
systemctl enable --now php-fpm
php -v
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php
curl http://www.laoma.cloud/info.php
FastCGI
-
安装 fcgiwrap
yum install -y fcgiwrap
-
配置 fcgiwrap
-
/etc/nginx/fcgiwrap.conf
:
location /cgi-bin/ {gzip offroot /usr/share/nginxfastcgi_pass unix:/var/run/fcgiwrap.socketinclude /etc/nginx/fastcgi_paramsfastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name }
-
将 include 加入站点配置 重启 Nginx
systemctl restart nginx
-
-
创建 systemd 单元并启用
-
/usr/lib/systemd/system/fcgiwrap.socket
与fcgiwrap.service
按示例编写 -
启用服务 并处理 SELinux 策略
systemctl enable --now fcgiwrap.socket setsebool -P httpd_can_network_connect on
-
-
准备测试 CGI 脚本
cat > /usr/share/nginx/cgi-bin/index.cgi << 'EOF' #!/usr/bin/python3 print("Content-type: text/html\n") print("<html><body><div style='width:100%;font-size:40px;font-weight:bold;text-align:center'>CGI Script Test Page</div></body></html>") EOF chmod +x /usr/share/nginx/cgi-bin/index.cgi curl http://www.laoma.cloud/cgi-bin/index.cgi
部署反向代理
角色说明
- 代理服务器 proxy 10.1.8.20
- 真实服务器 server 10.1.8.10
代理服务器配置
echo '10.1.8.10 www.laoma.cloud' >> /etc/hosts
yum install -y nginx
systemctl enable --now nginx
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
server {listen 80 default_serverlisten [::]:80 default_serverserver_name _proxy_redirect offproxy_set_header X-Real-IP $remote_addrproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_forproxy_set_header Host $http_hostlocation /proxy/ {proxy_pass http://www.laoma.cloud/}
}
setsebool -P httpd_can_network_connect on
systemctl restart nginx
真实服务器配置
yum install -y nginx
systemctl enable --now nginx
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
echo hello laoma > /usr/share/nginx/html/test.html
curl http://www.laoma.cloud/test.htmlproxy_pass http://www.laoma.cloud/}
}
setsebool -P httpd_can_network_connect on
systemctl restart nginx
真实服务器配置
yum install -y nginx
systemctl enable --now nginx
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
echo hello laoma > /usr/share/nginx/html/test.html
curl http://www.laoma.cloud/test.html