
1. 项目概述与需求分析最近在帮朋友搭建一个企业内部使用的Web服务器考虑到稳定性和性能需求最终选择了Nginx作为Web服务器软件。这个项目有几个核心需求点使用自定义域名www.example.com访问通过本地DNS服务器提供正反向解析配置DNS主从服务器确保高可用Web服务运行在非标准端口9093确保防火墙和SELinux策略正确配置实现服务开机自启这种配置方案特别适合需要内部域名解析的企业环境既能保证服务稳定性又能通过自定义端口增强安全性。下面我会详细拆解每个环节的配置过程和注意事项。2. 基础环境准备2.1 系统与软件安装首先需要准备一台干净的CentOS/RHEL 7服务器。我推荐使用最小化安装然后通过yum安装必要组件# 安装EPEL仓库包含nginx yum install -y epel-release # 安装基础软件包 yum install -y nginx bind bind-utils policycoreutils-python这里有几个关键点需要注意EPEL仓库提供了最新稳定版的Nginxbind软件包提供DNS服务功能policycoreutils-python包含SELinux管理工具提示生产环境建议使用官方Nginx仓库可以获得最新版本和商业支持选项。2.2 目录结构规划良好的目录规划能避免后期维护混乱mkdir -p /u01/www # Web根目录 mkdir -p /var/named # DNS区域文件目录 chmod 755 /u01/www # 确保Nginx有读取权限我习惯将网站内容放在/u01目录下与系统默认的/var/www区分开这样在多个项目共存时更清晰。3. Nginx配置详解3.1 基本服务配置在/etc/nginx/conf.d/目录下创建9093.confserver { listen 9093; server_name www.example.com; root /u01/www/; location / { index index.html; try_files $uri $uri/ 404; } # 日志配置 access_log /var/log/nginx/9093_access.log; error_log /var/log/nginx/9093_error.log; }关键参数说明listen 9093指定监听端口server_name定义匹配的域名root设置网站根目录try_files提供更友好的404处理3.2 非标准端口处理Nginx默认只允许监听部分端口如80、443等。要让其监听9093端口需要调整SELinux策略# 检查当前允许的HTTP端口 semanage port -l | grep http_port_t # 添加9093端口到允许列表 semanage port -a -t http_port_t -p tcp 90933.3 服务管理启动并验证Nginxsystemctl start nginx systemctl enable nginx netstat -tulnp | grep 9093 # 确认监听状态4. DNS服务器配置4.1 主DNS服务器配置编辑/etc/named.conf主配置文件options { listen-on port 53 { 192.168.121.132; }; directory /var/named; allow-query { localhost; 192.168.121.0/24; }; recursion no; # 转发设置 forward only; forwarders { 114.114.114.114; 8.8.8.8; }; }; # 正向解析区域 zone example.com IN { type master; file example.com; allow-transfer { 192.168.121.133; }; # 从服务器IP }; # 反向解析区域 zone 121.168.192.in-addr.arpa IN { type master; file example.fanxiang; allow-transfer { 192.168.121.133; }; };创建正向解析文件/var/named/example.com$TTL 1D IN SOA ns.example.com. admin.example.com. ( 2024032001 ; serial 8H ; refresh 30M ; retry 1W ; expire 1D ) ; minimum IN NS ns.example.com. ns IN A 192.168.121.132 www IN A 192.168.121.132创建反向解析文件/var/named/example.fanxiang$TTL 1D IN SOA ns.example.com. admin.example.com. ( 2024032001 ; serial 8H ; refresh 30M ; retry 1W ; expire 1D ) ; minimum IN NS ns.example.com. 132 IN PTR www.example.com.4.2 从DNS服务器配置从服务器配置/etc/named.confoptions { listen-on port 53 { any; }; directory /var/named; allow-query { any; }; recursion no; }; zone example.com IN { type slave; masters { 192.168.121.132; }; file slaves/named.example.com; }; zone 121.168.192.in-addr.arpa IN { type slave; masters { 192.168.121.132; }; file slaves/named.192.168.121; };4.3 DNS服务管理启动并验证DNS服务systemctl start named systemctl enable named # 测试解析 dig 192.168.121.132 www.example.com dig -x 192.168.121.132 192.168.121.1325. 防火墙与SELinux配置5.1 防火墙规则# 放行DNS和Web端口 firewall-cmd --permanent --add-port53/tcp firewall-cmd --permanent --add-port53/udp firewall-cmd --permanent --add-port9093/tcp firewall-cmd --reload5.2 SELinux策略# 允许Nginx访问web目录 semanage fcontext -a -t httpd_sys_content_t /u01/www(/.*)? restorecon -Rv /u01/www # 允许named访问区域文件 semanage fcontext -a -t named_zone_t /var/named(/.*)? restorecon -Rv /var/named # 设置SELinux模式 setenforce 16. 系统集成与测试6.1 客户端DNS配置在需要使用该服务的客户端上修改网络配置指向我们的DNS服务器nmcli connection modify eth0 ipv4.dns 192.168.121.132 nmcli connection up eth0Windows客户端可以在网络适配器设置中修改DNS服务器地址。6.2 完整测试流程从客户端解析域名nslookup www.example.com 192.168.121.132测试反向解析nslookup 192.168.121.132 192.168.121.132通过浏览器访问http://www.example.com:9093/检查从服务器同步ls /var/named/slaves/ # 查看是否生成同步文件7. 常见问题排查7.1 Nginx无法启动可能原因及解决方案端口冲突netstat -tulnp | grep 9093配置文件语法错误nginx -tSELinux阻止ausearch -m avc -ts recent7.2 DNS解析失败检查步骤确认named服务运行状态systemctl status named检查区域文件权限ls -lZ /var/named/查看查询日志tail -f /var/log/messages7.3 从服务器不同步排查方法检查主服务器allow-transfer设置查看从服务器日志journalctl -u named -f确认网络连通性telnet 192.168.121.132 538. 性能优化建议8.1 Nginx调优编辑/etc/nginx/nginx.confworker_processes auto; worker_connections 1024; keepalive_timeout 65; gzip on;8.2 DNS缓存设置调整/etc/named.confoptions { max-cache-size 100M; max-cache-ttl 3600; min-cache-ttl 300; };8.3 系统参数优化# 增加文件描述符限制 echo * soft nofile 65535 /etc/security/limits.conf echo * hard nofile 65535 /etc/security/limits.conf9. 安全加固措施9.1 Nginx安全隐藏服务器信息server_tokens off;限制HTTP方法if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 405; }9.2 DNS安全限制区域传输allow-transfer { 192.168.121.133; };禁用递归查询recursion no;9.3 系统安全定期更新yum update -y配置日志轮转yum install logrotate10. 维护与监控10.1 日常维护检查服务状态systemctl status nginx named监控磁盘空间df -h /var/log/ /var/named/10.2 监控配置资源监控yum install -y sysstat sar -u 1 3服务可用性监控curl -I http://localhost:909310.3 备份策略配置文件备份tar czf /backup/nginx_conf_$(date %F).tar.gz /etc/nginx/区域文件备份cp /var/named/* /backup/经过这样一套完整的配置我们建立了一个高可用的企业内部Web服务环境。实际部署时建议先在测试环境验证所有配置然后再迁移到生产环境。