如何配置 LNMP 支持 IPv6
- 2025-02-14 18:43:00
- 丁国栋
- 原创 49
需求:“完成信息化项目管理平台对IPv6应用的支持(包括业务系统对外提供IPv6网络服务、业务系统内容服务之间支持IPv6网络互相调用、业务系统内部中间件/技术组件支持IPv6网络连接、业务系统内部数据库支持IPv6网络连接)”
实现:
需求中提到的“信息化项目管理平台”是禅道项目管理软件,是用PHP编写,使用LNMP Web架构部署。
以 Red Hat Enterprise Linux 8 为例,介绍如何配置 Linux、Nginx、MySQL、PHP 启用 IPv6 访问。IPv6已经出现很久了,几乎所有流行的软件都支持。
本次实验环境使用 Ubuntu 24.04 LTS + VirtualBox + RHEL8 搭建,虚拟机配置双网卡(网卡1设置桥接网络配置ipv6地址,网卡2 设置NAT网络配置ipv4地址用于访问Internet),主机系统添加一个 ipv6 地址用于验证IPv6访问。
因为主机系统 Ubuntu 24 LTS 已经安装了 Gnome 桌面,所以配置文件与无GUI的可能有所差异,仅作记录以供参考。
#sudo cat /etc/netplan/90-NM-e1419a5e-5e1d-3fff-a17c-b2fc6d2cef99.yaml network: version: 2 ethernets: enp5s0: renderer: NetworkManager match: {} addresses: - "2409:8050:58c0:bbf5::53:13/112" dhcp4: true networkmanager: uuid: "e1419a5e-5e1d-3fff-a17c-b2fc6d2cef99" name: "netplan-enp5s0" passthrough: connection.timestamp: "1738982775" ipv6.ip6-privacy: "-1" proxy._: ""
以下是服务端(虚拟机)配置
Linux IPv6 配置
配置文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3 添加 IPV6ADDR=2409:8050:58c0:bbf5::53:7/112
# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=no IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=enp0s3 UUID=7322d535-b0cf-4f94-9896-bccafcc13c34 DEVICE=enp0s3 ONBOOT=yes IPV6ADDR=2409:8050:58c0:bbf5::53:7/112
Nginx IPv6 配置
实验环境简易安装:yum install -y nginx
在nginx配置文件中使用英文中括号将IPv6地址包裹起来。
listen [::]:80;
修改 Nginx php 配置,通过 IPv6 访问 php-fpm:
# cat /etc/nginx/conf.d/php-fpm.conf # PHP-FPM FastCGI server # network or unix domain socket configuration upstream php-fpm { #server unix:/run/php-fpm/www.sock; server [2409:8050:58c0:bbf5::53:7]:9000; }
PHP IPv6 配置
实验环境简易安装:yum install -y php-fpm php-pdo php-mysqlnd php-mbstring php-json php-cli
修改 /etc/php-fpm.d/www.conf 配置文件
listen = 9000 listen.allowed_clients = 127.0.0.1,2409:8050:58c0:bbf5::53:7
注意:在 php代码中 pdo|mysqlnd 的配置也需要像Nginx那样使用英文中括号将IPv6地址包裹起来。
MySQL IPv6 配置
实验环境简易安装:yum install -y mysql-server
修改 /etc/my.cnf.d/mysql-server.cnf 修改或添加以下配置:
bind-address=::
可参考MySQL官方文档: https://dev.mysql.com/doc/refman/8.4/en/ipv6-server-config.html
浏览器访问验证
如果使用 IPv6 地址访问而不是使用域名,也需要使用英文中括号将IPv6地址包裹起来。
http://[2409:8050:58c0:bbf5::53:7]/index.php
--