当前位置: 首页 > news >正文

【Nginx开荒攻略】Nginx静态文件服务:从MIME类型到缓存优化的完整指南

目录

引言

1 文件类型映射与MIME类型

1.1 MIME类型概述

1.2 MIME类型的作用机制

1.2.1 HTTP响应头中的MIME类型

1.2.2 常见MIME类型示例

1.3 Nginx中的MIME类型配置

1.3.1 mime.types文件

1.3.2 default_type指令

1.3.3 MIME类型配置示例

1.4 MIME类型问题排查与解决

1.4.1 常见MIME类型问题

1.4.2 MIME类型调试技巧

2 目录列表与索引文件

2.1 目录列表概述

2.2 autoindex模块详解

2.2.1 基本配置

2.2.2 autoindex参数详解

2.2.3 目录列表样式配置

2.3 索引文件配置

2.3.1 index指令详解

2.3.2 索引文件高级配置

2.4 目录列表安全控制

2.4.1 基本认证配置

2.4.2 IP访问控制

2.4.3 用户代理限制

2.5 目录列表优化与定制

2.5.1 性能优化配置

2.5.2 自定义目录列表页面

2.5.3 目录列表与SEO优化

3 静态文件缓存优化

3.1 静态文件缓存概述

3.2 expires缓存控制

3.2.1 基本语法

3.2.2 时间格式详解

3.2.3 缓存策略配置

3.3 gzip压缩优化

3.3.1 基本配置

3.3.2 高级gzip配置

3.3.3 gzip压缩效果分析

3.4 文件缓存优化

3.4.1 open_file_cache配置

3.4.2 sendfile优化

3.5 高级缓存策略

3.5.1 条件缓存

3.5.2 版本化缓存

3.5.3 缓存清除策略

3.6 缓存监控与分析

3.6.1 缓存命中率监控

3.6.2 性能监控指标

4 结语


引言

本文将探讨Nginx静态文件服务的三大核心功能:文件类型映射与MIME类型、目录列表与索引文件、静态文件缓存优化。通过原理讲解、配置示例和实践,以全面掌握Nginx静态文件服务的精髓,构建高性能、高可用的静态资源服务体系。

1 文件类型映射与MIME类型

1.1 MIME类型概述

MIME(Multipurpose Internet Mail Extension,多用途互联网邮件扩展)类型最初是为了满足电子邮件支持多字符集及附件而出现的标准。如今,它已成为Web领域中标识文件类型的重要机制。
  • 客户端请求:浏览器向服务器请求某个文件
  • 文件扩展名:服务器根据请求文件的扩展名确定文件类型
  • MIME类型查找:在MIME类型配置文件中查找对应的MIME类型
  • Content-Type设置:在HTTP响应头中设置Content-Type字段
  • 浏览器处理:浏览器根据Content-Type决定如何处理文件内容

1.2 MIME类型的作用机制

MIME类型通过HTTP协议的Content-Type响应头告诉浏览器如何处理返回的文件内容。正确设置MIME类型对于Web应用的正常运行至关重要。

1.2.1 HTTP响应头中的MIME类型

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Date: Wed, 01 Jan 2025 12:00:00 GMT
Server: nginx/1.18.0<!DOCTYPE html>
<html>
<head><title>示例页面</title>
</head>
<body><h1>Hello World</h1>
</body>
</html>
关键要素说明:
  • Content-Type:指定文件的主要MIME类型
  • charset:指定字符编码(可选)
  • 其他参数:如boundary(multipart类型)、name(form-data类型等)

1.2.2 常见MIME类型示例

文件扩展名

MIME类型

描述

.html

text/html

HTML文档

.css

text/css

CSS样式表

.js

application/javascript

JavaScript文件

.jpg, .jpeg

image/jpeg

JPEG图片

.png

image/png

PNG图片

.gif

image/gif

GIF图片

.svg

image/svg+xml

SVG矢量图

.pdf

application/pdf

PDF文档

.json

application/json

JSON数据

.xml

application/xml

XML文档

.txt

text/plain

纯文本文件

1.3 Nginx中的MIME类型配置

1.3.1 mime.types文件

# 在nginx.conf中引入mime.types文件
include /etc/nginx/mime.types;# MIME类型定义示例
types {text/html                             html htm shtml;text/css                              css;text/xml                              xml rss;text/plain                            txt;text/javascript                      js;application/json                      json;application/atom+xml                  atom;application/rss+xml                   rss;image/svg+xml                         svg svgz;image/jpeg                            jpeg jpg;image/gif                            gif;image/png                            png;image/webp                            webp;image/x-icon                         ico;application/octet-stream             bin exe dll;application/x-rar-compressed          rar;application/x-gzip                    gz;application/zip                       zip;
}
配置说明:
  • include指令引入系统默认的MIME类型定义文件
  • types块可以自定义MIME类型映射
  • 每行定义一个主类型,可以包含多个子类型和文件扩展名

1.3.2 default_type指令

# 设置默认MIME类型
default_type application/octet-stream;# 在特定location中覆盖默认类型
location /api/ {default_type application/json;
}
配置说明:
  • 当找不到匹配的MIME类型时,使用default_type指定的类型
  • 可以在http、server、location块中设置
  • 通常设置为application/octet-stream(未知二进制流)

1.3.3 MIME类型配置示例

server {listen 80;server_name example.com;root /var/www/html;# 引入MIME类型定义include /etc/nginx/mime.types;# 设置默认类型default_type application/octet-stream;location / {try_files $uri $uri/ =404;}# 针对特定文件类型的MIME类型设置location ~* \.(js|css)$ {add_header Content-Type text/css;}# 处理未知文件类型location ~* \.(unknown|custom)$ {default_type text/plain;add_header Content-Type "text/plain; charset=utf-8";}
}

1.4 MIME类型问题排查与解决

1.4.1 常见MIME类型问题

  • 问题1:CSS文件无法加载
/* 浏览器控制台显示 */
Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://example.com/style.css"
  • 解决方案:
location ~* \.css$ {add_header Content-Type text/css;
}
  • 问题2:字体文件加载失败
location ~* \.css$ {add_header Content-Type text/css;
}
  • 解决方案:
location ~* \.(woff|woff2|ttf|otf|eot)$ {add_header Access-Control-Allow-Origin "*";add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS";add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
}

1.4.2 MIME类型调试技巧

  • 检查服务器响应头
curl -I http://example.com/style.css
  • 查看Nginx日志
tail -f /var/log/nginx/error.log
grep ".*MIME.*" /var/log/nginx/error.log
  • 使用在线工具检测
# 使用file命令检测文件类型 
file -i /path/to/file

2 目录列表与索引文件

2.1 目录列表概述

  • 在Web服务中,目录列表功能允许用户浏览服务器上的文件和目录结构。Nginx通过ngx_http_autoindex_module模块提供这一功能,但出于安全考虑,默认情况下是禁用的
  • 客户端请求:浏览器访问服务器上的某个路径
  • 目录判断:检查请求的是否为目录
  • index文件检查:查找目录中的index文件
  • 文件返回:如果存在index文件,直接返回
  • 目录列表生成:如果不存在index文件且启用了autoindex,生成目录列表
  • 错误处理:如果既没有index文件也没有启用autoindex,返回403错误

2.2 autoindex模块详解

2.2.1 基本配置

# 启用目录列表功能
autoindex on;# 禁用目录列表功能(默认)
autoindex off;# 配置示例
server {listen 80;server_name example.com;root /var/www/share;location /downloads/ {autoindex on;  # 启用目录列表autoindex_exact_size off;  # 以KB/MB/GB显示文件大小autoindex_localtime on;   # 显示本地时间index index.html;  # 优先显示index文件}
}
参数说明:
  • autoindex:启用或禁用目录列表功能
  • autoindex_exact_size:控制文件大小的显示格式
  • autoindex_localtime:控制时间的显示格式(本地时间/UTC时间)

2.2.2 autoindex参数详解

# autoindex指令
Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location# autoindex_exact_size指令
Syntax: autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location# autoindex_localtime指令
Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off;
Context: http, server, location# auto_format指令
Syntax: auto_format on | off;
Default: auto_format off;
Context: http, server, location
参数详解:
  • autoindex
    • on:启用目录列表功能
    • off:禁用目录列表功能(默认)
  • autoindex_exact_size
    • on:显示文件的确切字节大小
    • off:以KB、MB、GB为单位显示文件大小
  • autoindex_localtime
    • on:显示本地时间
    • off:显示UTC时间(默认)
  • auto_format
    • on:启用XML格式的目录列表
    • off:使用HTML格式(默认)

2.2.3 目录列表样式配置

server {listen 80;server_name example.com;root /var/www/share;location /downloads/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;# 自定义目录列表样式location ~* ^/downloads/(.*)$ {add_header X-Autoindex-Style "custom";}}
}

2.3 索引文件配置

2.3.1 index指令详解

# 基本语法
Syntax: index file ...;
Default: index index.html;
Context: http, server, location# 配置示例
server {listen 80;server_name example.com;root /var/www/html;# 设置多个索引文件,按顺序查找index index.php index.html index.htm default.htm;location / {try_files $uri $uri/ =404;}
}
工作机制:
  • 顺序查找:按配置的顺序依次查找索引文件
  • 第一个匹配:返回第一个存在的索引文件
  • 全部不存在:如果所有索引文件都不存在,根据autoindex配置处理

2.3.2 索引文件高级配置

server {listen 80;server_name example.com;root /var/www/html;# 全局索引文件配置index index.html index.htm;# 特定路径的索引文件配置location /admin/ {index admin.php index.html;}location /blog/ {index index.php;}# 使用变量的索引文件配置location /locale/ {index index.$geo.html index.html;}# 指定绝对路径的索引文件location /docs/ {index /var/www/docs/main.html;}
}
配置说明:
  • 多文件配置:可以配置多个索引文件,按顺序查找
  • 层级配置:不同location可以设置不同的索引文件
  • 变量使用:可以使用变量动态选择索引文件
  • 绝对路径:支持指定绝对路径的索引文件

2.4 目录列表安全控制

2.4.1 基本认证配置

server {listen 80;server_name example.com;root /var/www/share;location /private/ {autoindex on;# 启用基本认证auth_basic "Private Area";auth_basic_user_file /etc/nginx/.htpasswd;# 限制访问来源allow 192.168.1.0/24;deny all;}
}
  • 生成密码文件:
# 安装htpasswd工具
sudo apt-get install apache2-utils# 创建密码文件
sudo htpasswd -c /etc/nginx/.htpasswd username

2.4.2 IP访问控制

server {listen 80;server_name example.com;root /var/www/share;location /downloads/ {autoindex on;# 只允许内网访问allow 192.168.1.0/24;allow 10.0.0.0/8;deny all;}location /public/ {autoindex on;# 允许所有访问allow all;}
}

2.4.3 用户代理限制

server {listen 80;server_name example.com;root /var/www/share;location /downloads/ {autoindex on;# 只允许特定浏览器访问if ($http_user_agent ~* "Chrome|Firefox") {break;}return 403;}
}

2.5 目录列表优化与定制

2.5.1 性能优化配置

server {listen 80;server_name example.com;root /var/www/share;location /downloads/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;# 启用文件缓存open_file_cache max=1000 inactive=20s;open_file_cache_valid 30s;open_file_cache_min_uses 2;open_file_cache_errors on;# 限制目录列表大小limit_rate 100k;# 启用压缩gzip on;gzip_types text/html;}
}

2.5.2 自定义目录列表页面

server {listen 80;server_name example.com;root /var/www/share;location /downloads/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;# 自定义HTML模板location ~* ^/downloads/(.*)$ {add_header X-Custom-Header "Directory Listing";# 添加自定义CSSadd_header Link '<style>body { font-family: Arial; }</style>';}}
}

2.5.3 目录列表与SEO优化

server {listen 80;server_name example.com;root /var/www/share;location /downloads/ {autoindex on;# 添加SEO相关的meta标签add_header X-Robots-Tag "noindex, nofollow";# 添加自定义页面标题add_header X-Page-Title "File Downloads";# 生成sitemaplocation ~* ^/downloads/sitemap\.xml$ {default_type application/xml;autoindex off;}}
}

3 静态文件缓存优化

3.1 静态文件缓存概述

  • 静态文件缓存是提升Web性能的重要手段。通过合理的缓存策略,可以显著减少网络传输、降低服务器负载、提高用户访问速度。Nginx提供了多种缓存机制,包括浏览器缓存、文件缓存和代理缓存等
缓存工作流程说明:
  • 用户请求:用户浏览器发起静态资源请求
  • 缓存检查:Nginx检查请求的资源是否在缓存中
  • 缓存命中:如果命中缓存,直接返回缓存内容
  • 缓存未命中:如果未命中,请求源服务器获取资源
  • 响应处理:服务器返回资源内容
  • 缓存判断:判断资源是否可以缓存
  • 缓存保存:如果可以缓存,保存到缓存中
  • 响应返回:将响应内容返回给用户

3.2 expires缓存控制

expires指令是Nginx中最常用的缓存控制指令,用于设置HTTP响应头中的Expires和Cache-Control字段。

3.2.1 基本语法

# 基本语法
Syntax: expires epoch | max | off | time;
Default: expires off;
Context: http, server, location# 配置示例
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {expires 1y;add_header Cache-Control "public, immutable";
}
参数说明:
  • epoch:过期时间为1970年1月1日00:00:00 GMT
  • max:过期时间为2037年12月31日23:59:59 GMT
  • off:禁用expires指令(默认)
  • time:指定具体时间,如1d、1h、1m、1s等

3.2.2 时间格式详解

# 时间格式示例
expires 1s;      # 1秒后过期
expires 1m;      # 1分钟后过期
expires 1h;      # 1小时后过期
expires 1d;      # 1天后过期
expires 1M;      # 1月后过期
expires 1y;      # 1年后过期
expires max;     # 最大过期时间
expires epoch;   # 立即过期
时间格式规则:
  • s:秒
  • m:分钟
  • h:小时
  • d:天
  • M:月(30天)
  • y:年(365天)

3.2.3 缓存策略配置

server {listen 80;server_name example.com;root /var/www/static;# 不缓存的资源location ~* \.(php|jsp|asp|cgi)$ {expires off;add_header Cache-Control "no-cache, no-store, must-revalidate";}# 短期缓存资源location ~* \.(html|htm|xml|txt)$ {expires 1h;add_header Cache-Control "public, max-age=3600";}# 中期缓存资源location ~* \.(css|js)$ {expires 1d;add_header Cache-Control "public, max-age=86400";}# 长期缓存资源location ~* \.(png|jpg|jpeg|gif|ico|svg|webp|woff|woff2|ttf|eot)$ {expires 1y;add_header Cache-Control "public, max-age=31536000, immutable";}# 大文件下载location ~* \.(zip|rar|7z|tar|gz|bz2)$ {expires 30d;add_header Cache-Control "public, max-age=2592000";}
}
缓存策略说明:
  • no-cache:需要向服务器验证资源是否过期
  • no-store:不缓存到任何地方
  • public:可以被任何缓存(包括CDN)缓存
  • private:只能被用户浏览器缓存
  • max-age:指定缓存时间(秒)
  • immutable:资源永远不会改变,浏览器可以永久缓存

3.3 gzip压缩优化

gzip压缩是减少传输数据量、提高加载速度的重要手段。Nginx通过ngx_http_gzip_module模块提供gzip压缩功能。

3.3.1 基本配置

# 启用gzip压缩
gzip on;# 压缩级别(1-9)
gzip_comp_level 6;# 最小压缩文件大小
gzip_min_length 1000;# 压缩类型
gzip_typestext/plaintext/csstext/xmltext/javascriptapplication/jsonapplication/javascriptapplication/xml+rssapplication/atom+xmlimage/svg+xml;# 禁用gzip的浏览器
gzip_disable "MSIE [1-6]\.";

3.3.2 高级gzip配置

# 完整的gzip配置
gzip on;
gzip_vary on;  # 在响应头中添加Vary: Accept-Encoding
gzip_min_length 1024;  # 最小压缩大小
gzip_comp_level 6;    # 压缩级别
gzip_typestext/plaintext/csstext/xmltext/javascriptapplication/jsonapplication/javascriptapplication/xml+rssapplication/atom+xmlimage/svg+xmlapplication/x-font-ttffont/opentypeapplication/vnd.ms-fontobject;# 针对特定location的gzip配置
location ~* \.(css|js)$ {gzip on;gzip_comp_level 7;gzip_min_length 100;add_header Cache-Control "public, max-age=31536000, immutable";
}location ~* \.(html|htm)$ {gzip on;gzip_comp_level 5;gzip_min_length 500;expires 1h;add_header Cache-Control "public, max-age=3600";
}
gzip配置参数详解:
  • gzip:启用或禁用gzip压缩
  • gzip_vary:在响应头中添加Vary: Accept-Encoding
  • gzip_min_length:最小压缩文件大小(字节)
  • gzip_comp_level:压缩级别(1-9,1最快压缩率最低,9最慢压缩率最高)
  • gzip_types:指定需要压缩的文件类型
  • gzip_disable:禁用gzip的浏览器正则表达式

3.3.3 gzip压缩效果分析

# 测试gzip压缩效果
location ~* \.(css|js|html)$ {gzip on;gzip_comp_level 6;gzip_min_length 1000;# 添加压缩信息头add_header X-Content-Encoding gzip;add_header X-Content-Length $body_bytes_sent;# 记录压缩信息到日志log_format gzip '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''compressed:$gzip_ratio';access_log /var/log/nginx/gzip.log gzip;
}

3.4 文件缓存优化

Nginx提供了多种文件缓存机制,包括文件缓存、open_file_cache等,可以显著提高静态文件的访问速度。

3.4.1 open_file_cache配置

# 启用文件缓存
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;# 配置示例
server {listen 80;server_name example.com;root /var/www/static;location / {try_files $uri $uri/ =404;}location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {open_file_cache max=1000 inactive=20s;open_file_cache_valid 30s;open_file_cache_min_uses 2;open_file_cache_errors on;expires 1y;add_header Cache-Control "public, immutable";}
}
参数说明:
  • max:缓存的最大文件描述符数量
  • inactive:文件在缓存中的最长时间(秒)
  • valid:验证缓存有效的时间间隔(秒)
  • min_uses:文件在缓存中至少被访问多少次后才被认为是活动的
  • errors:是否缓存文件查找错误

3.4.2 sendfile优化

# 启用sendfile
sendfile on;
tcp_nopush on;
tcp_nodelay on;# 配置示例
server {listen 80;server_name example.com;root /var/www/static;# 启用sendfilesendfile on;tcp_nopush on;    # 优化网络包发送tcp_nodelay on;   # 禁用Nagle算法location / {try_files $uri $uri/ =404;}location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {sendfile on;tcp_nopush on;tcp_nodelay on;expires 1y;add_header Cache-Control "public, immutable";}
}
参数说明:
  • sendfile:启用零拷贝文件传输
  • tcp_nopush:在发送响应时先发送包头,再发送包体
  • tcp_nodelay:禁用Nagle算法,减少延迟

3.5 高级缓存策略

3.5.1 条件缓存

# 基于条件的缓存配置
location ~* \.(css|js)$ {if ($http_user_agent ~* "Mobile") {expires 1d;add_header Cache-Control "public, max-age=86400";}if ($http_user_agent ~* "Desktop") {expires 1y;add_header Cache-Control "public, max-age=31536000, immutable";}
}

3.5.2 版本化缓存

# 基于文件版本化的缓存
location ~* ^/static/([^/]+\.(css|js))$ {set $versioned_file /static/v1/$1;try_files $versioned_file $uri =404;expires 1y;add_header Cache-Control "public, max-age=31536000, immutable";
}# 版本化文件目录结构
# /var/www/static/
# ├── v1/
# │   ├── app.css
# │   ├── app.js
# │   └── vendor.js
# └── v2/
#     ├── app.css
#     ├── app.js
#     └── vendor.js

3.5.3 缓存清除策略

# 缓存清除配置
server {listen 80;server_name example.com;root /var/www/static;# 清除缓存端点location ~* ^/cache-clear/([^/]+)$ {# 认证auth_basic "Cache Management";auth_basic_user_file /etc/nginx/.htpasswd;# 验证权限allow 192.168.1.0/24;deny all;# 清除缓存add_header X-Cache-Cleared "true";return 200 "Cache cleared for $1";}# 普通静态资源location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {expires 1y;add_header Cache-Control "public, max-age=31536000, immutable";}
}

3.6 缓存监控与分析

3.6.1 缓存命中率监控

# 缓存命中率统计
log_format cache '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''hit:$gzip_ratio size:$body_bytes_sent';access_log /var/log/nginx/cache.log cache;# 缓存命中率分析脚本
#!/bin/bash# 分析缓存日志
if [ -f "/var/log/nginx/cache.log" ]; thentotal_requests=$(wc -l < /var/log/nginx/cache.log)cache_hits=$(grep "hit:" /var/log/nginx/cache.log | wc -l)cache_miss=$((total_requests - cache_hits))hit_ratio=$(echo "scale=2; $cache_hits * 100 / $total_requests" | bc)echo "缓存统计报告:"echo "总请求数: $total_requests"echo "缓存命中: $cache_hits"echo "缓存未命中: $cache_miss"echo "缓存命中率: ${hit_ratio}%"
elseecho "缓存日志文件不存在"
fi

3.6.2 性能监控指标

# 性能监控配置
server {listen 80;server_name example.com;root /var/www/static;# 添加性能监控头add_header X-Response-Time $request_time;add_header X-Server-Load $server_load;add_header X-Cache-Status $upstream_cache_status;location / {try_files $uri $uri/ =404;}location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {expires 1y;add_header Cache-Control "public, max-age=31536000, immutable";}
}

4 结语

Nginx静态文件服务是Web应用的基础,但如何高效地提供静态资源却是一门艺术。通过本文的了解,我们全面了解了MIME类型映射、目录列表功能和缓存优化的核心原理和配置方法。
正确配置Nginx静态文件服务不仅可以提高网站性能,还能改善用户体验,降低服务器负载。记住,静态文件优化是一个持续的过程,需要根据实际业务需求和技术发展不断调整和改进。
http://www.dtcms.com/a/413051.html

相关文章:

  • 上传的网站怎么打开洛可可设计公司怎么样
  • 秦皇岛城乡住房建设厅网站申请域名免费
  • 教育兼职网站开发青岛北京网站建设价格
  • 从机械齿轮到硅基大脑:计算机起源探秘(2)
  • 个人网站设计模板素材企业网络构建
  • 团购网站怎么推广专业网站建设课程
  • wordpress本站导航在哪里做cpa网站
  • 做会展网站的关键词前端面试题2022
  • 长治公司网站建设网站建设公司知名
  • 成都建设局网站手机上如何制作小程序
  • 平台网站很难做建筑人才招聘网站平台
  • 济南网站建设找聚搜网络软件推广公司
  • 千博网站后台seo推广如何做
  • 景观设计案例网站做高端品牌网站
  • 班级网站制作建设的设计和作用wordpress仿站开发
  • 网站建设者属于广告经营者吗网站反链
  • 网页制作与网站设计思路做爰明星视频网站
  • 鄂州网站开发网页制作登录界面代码
  • 国航网站建设做兼职上哪个网站
  • 吴家山网站建设公司律师手机网站模板
  • 微网站注意事项潍坊知名网站建设最新报价
  • 英语教育网站建设做网站推广如何
  • 网站维护 关站 seo好的网站或网页
  • 河南网站制作公司东莞市研发网站建设企业
  • 外贸式响应式网站广东网站制作
  • 网站建设 物流四川建设局网站首页
  • 网站怎么做付款平台掀浪云网站建设
  • 白沙网站建设网站备案号找回密码
  • 杭州商标设计优化网站标题和描述的方法
  • 黄冈市建设银行网站北京网站建设专业公司