如何使用Nginx配置单个和多个WordPress网站设置

介绍:

WordPress是当今互联网上运用最广泛的CMS(内容管理体系)。可以运用HTTP服务器(例如Apache或NGINX)为WordPress网站提供服务,虽然Apache是服务网站的绝佳挑选,但由于它具有可扩展的事情驱动架构,资源少和静态文件传递效果好等长处,许多站点已迁移到NGINX。在本教程中,您将学习如何为各种类型的WordPress装置装备NGINX,包括多站点装备,重写规矩以及运用.conf文件应用重复的装备。

要求:

在本指南中,您将需要sudo来安装和编辑文件。我假设您已经完成了初始服务器设置。

您将需要安装MySQL,PHP和NGINX。您可以按照以下指南在Ubuntu或Debian上安装LEMP 。

请注意,我们的服务器块将有所不同,并且在本教程中,我们使PHP-FPM使用UNIX套接字。

基本的NGINX优化:

1.调整NGINX工作进程和连接
通常建议将NGINX工作者的数量设置为等于处理器的数量,您可以使用以下方法确定处理器的数量:

cat /proc/cpuinfo | grep processor

2.打开主要的Nginx配置文件:

sudo nano /etc/nginx/nginx.conf

3.根据系统规格增加或减少工作人员数量:

worker_processes 1;

4.Nginx限制了工作人员一次可以维护的连接数,如果您的网站有很多访问者,则可能需要增加连接数限制。理论上,最大连接数=工人*限制。

worker_connections 768;

启用Gzip:

可以使用Gzip压缩文件以加速WordPress,用户请求的数据量越小,响应速度越快。考虑一下CSS文件和HTML文件,它们具有许多相似的字符串,重复的文本和空格。Gzip使用一种称为DEFLATE的算法,该算法通过链接到相同字符串的先前位置来删除重复的字符串,并创建一个更小的文件。找到“ Gzip”部分并启用它:

gzip on;
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;

保存并退出。

创建NGINX .conf文件:

由于您可能托管多个WordPress网站,因此我们将创建一些.conf文件,这些文件可以从服务器块加载,而不是在每个服务器块上多次写入相同的配置。

在接下来的步骤中,我们将创建3个文件来保存我们的配置:

1.common.conf:适用于所有站点的配置。

2.wordpress.conf:适用于所有WordPress网站的配置。

3.multisite.conf:带有子目录的WordPress多站点的特殊配置。

我们将在名为“ global”的目录中创建所有文件,但是首先我们需要创建所提及的目录:

sudo mkdir /etc/nginx/global

我将把/etc/nginx/global设置为当前目录,只是为了使事情变得简单。

cd /etc/nginx/global

common.conf文件
让我们创建适用于任何类型网站的第一个.conf文件。

sudo nano common.conf

这将打开一个空文件,复制以下配置:

# Global configuration file.
# ESSENTIAL : Configure Nginx Listening Port
listen 80;
# ESSENTIAL : Default file to serve. If the first file isn't found, 
index index.php index.html index.htm;
# ESSENTIAL : no favicon logs
location = /favicon.ico {
    log_not_found off;
    access_log off;
}
# ESSENTIAL : robots.txt
location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}
# ESSENTIAL : Configure 404 Pages
error_page 404 /404.html;
# ESSENTIAL : Configure 50x Pages
error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/www;
    }
# SECURITY : Deny all attempts to access hidden files .abcde
location ~ /\. {
    deny all;
}
# PERFORMANCE : Set expires headers for static files and turn off logging.
location ~* ^.+\.(js|css|swf|xml|txt|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off; log_not_found off; expires 30d;
}

需要注意:

listen 80;指定服务器的侦听端口

index index.php…指定要提供的默认文件(WordPress index.php)。如果找不到第一个文件,则将使用第二个,依此类推。您可能有HTML网站,这就是我们包括index.html&index.htm;的原因。

location = /robots.txt {allow all;}允许访问robots.txt,如果要为robots.txt指定另一个目录,则可以添加别名:

location /robots.txt {
    alias /var/www/example.com/public/sample_robots.txt;
}

location ~ /\. {deny all;}在Linux操作系统中,隐藏文件以“。”开头,出于安全原因,应禁止访问某些隐藏文件,例如.htaccess。

location ~* ^.+\.(js|css|swf…expires标头告诉浏览器是应该从服务器请求特定文件还是应该从浏览器的缓存中获取文件。随着到期30天,我们告诉浏览器将静态文件(例如图片)存储30天。

保存并退出。

[title]wordpress.conf文件[/title]

让我们创建一个适用于所有WordPress网站的.conf文件:

sudo nano wordpress.conf

这将打开一个空文件,复制以下配置:

# WORDPRESS : Rewrite rules, sends everything through index.php and keeps the appended query string intact
location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

# SECURITY : Deny all attempts to access PHP Files in the uploads directory
location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}
# REQUIREMENTS : Enable PHP Support
location ~ \.php$ {
    # SECURITY : Zero day Exploit Protection
    try_files $uri =404;
    # ENABLE : Enable PHP, listen fpm sock
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}
# PLUGINS : Enable Rewrite Rules for Yoast SEO SiteMap
rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;

#Yeah! you did it.

try_files $uri $uri/ /index.php?q=$uri&$args需要重写规则,以允许您选择WordPress上的自定义永久链接结构。

location ~* /(?:uploads|files)/.*\.php$ {deny all;}这样可以防止恶意代码从WordPress媒体目录上载和执行。

location ~ \.php$ {…}由于WordPress是一个php网站,我们需要告诉NGINX如何将我们的php脚本传递给PHP5。

try_files $uri =404;这是一条安全规则,您只想提供确定的php文件或出现404错误。

更多规则:您可能想添加更多NGINX规则,例如,如果您使用与我在所有安装中都需要自定义规则的WP插件相同的方法,则可以在此.conf文件中添加更多规则,例如,我使用Yoast SEO因此,在我所有的网站上,我都在此处添加了所需的重写规则,因此不必为每个服务器块复制相同的重写规则。

multisite.conf文件:

与可以使用“丑陋”的永久链接工作并因此不需要任何URL重写的单个站点WordPress不同,MultiSite安装需要自定义重写规则来格式化子站点的URL。让我们创建一个适用于多站点WordPress安装的.conf文件:

sudo nano multisite.conf

这将打开一个空文件,复制所需的重写规则:

# Rewrite rules for WordPress Multi-site.
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}

保存并退出。

小笔记
我们当前的工作目录是/ etc / nginx / global,如果要更改它,可以键入:

cd /desired_directory

[title]创建服务器块[/title]

现在该创建我们的第一个服务器块了。由于我们已经在.conf文件中配置了所有内容,因此无需复制默认服务器阻止文件。让我们禁用默认服务器块:

sudo rm /etc/nginx/sites-enabled/default

并创建一个服务器阻止文件:

sudo nano /etc/nginx/sites-available/demo

这将打开一个空文件,根据您要实现的目的复制以下配置:

简单的WordPress安装
假设您要使用此域www.demo.com配置WordPress网站。首先,我们必须创建一个服务器块server {…},在其中放置规则。我们必须指定用于给定URL的服务器块,包括common.conf和wordpress.conf,最后我们将告诉NGINX服务器中WordPress安装的位置。

server {
    # URL: Correct way to redirect URL's
    server_name demo.com;
    rewrite ^/(.*)$ http://www.demo.com/$1 permanent;
}
server {
    server_name www.demo.com;
    root /home/demouser/sitedir;
    access_log /var/log/nginx/www.demo.com.access.log;
    error_log /var/log/nginx/www.demo.com.error.log;
    include global/common.conf;
    include global/wordpress.conf;
}

切记更改以下数据以满足您的需求:

1.server_name:确定哪个服务器块用于给定的URL。

2.root:站点存储路径。

3.访问日志和错误日志:设置日志的路径

您可以看到有两个服务器块,这是因为www.demo.com和demo.com是不同的URL。您可能要确保Google,Bing,用户…等选择您想要的URL,在这种情况下,我希望我的网站为www.demo.com,因此我已配置了从demo.com到www.demo的永久重定向。.com。也可以指定多个域:

server {
    # URL: Correct way to redirect URL's
    server_name demo.com sub.demo.com example.com;

带有子目录的多站点
如果要使用子目录进行多站点安装,则需要包括存储在multisite.conf中的重写规则:

# URL: add a permanent redirect if required.
server {
    server_name www.demo1.com;
    root /home/demouser/sitedir1;
    access_log /var/log/nginx/www.demo1.com.access.log;
    error_log /var/log/nginx/www.demo1.com.error.log;
    include global/common.conf;
    include global/wordpress.conf;
    include global/multisite.conf;
}

带有子域的多站点
如果要使用子域进行多站点安装,则需要配置此服务器块以侦听带有通配符的域:

server {
    server_name *.demo2.com;
    root /home/demouser/sitedir2;
    access_log /var/log/nginx/demo2.com.access.log;
    error_log /var/log/nginx/demo2.com.error.log;
    include global/common.conf;
    include global/wordpress.conf;
}

HTML和其他网站
如果要托管简单的html网站或其他Web应用程序,则可能需要指定自定义规则或创建更多.conf文件,并将它们包括在服务器块中:

# URL: add a permanent redirect if required.
server {
server_name www.demo3.com;
root /home/demouser/sitedir3;
access_log /var/log/nginx/demo3.com.access.log;
error_log /var/log/nginx/demo3.com.error.log;
# custom rules
}

记住要保存并退出。

启用服务器阻止文件:

最后一步是通过在站点可用目录和站点启用目录之间创建符号链接来激活主机:

sudo ln -s /etc/nginx/sites-available/demo /etc/nginx/sites-enabled/demo

我们对配置进行了很多更改。重新加载Nginx并使更改可见。

sudo service nginx reload;

最后说明:

要创建其他虚拟主机,您只需重复以上过程,请小心设置每次带有适当新域名的新文档根目录。也可以在一个文件中组合多个服务器块:

server {
    server_name demo.com;
    rewrite ^/(.*)$ http://www.demo.com/$1 permanent;
}
server {
    server_name www.demo.com;
    root /home/demouser/sitedir;
    access_log /var/log/nginx/www.demo.com.access.log;
    error_log /var/log/nginx/www.demo.com.error.log;
    include global/common.conf;
    include global/wordpress.conf;
}

server {
    server_name www.demo1.com;
    root /home/demouser/sitedir1;
    access_log /var/log/nginx/www.demo1.com.access.log;
    error_log /var/log/nginx/www.demo1.com.error.log;
    include global/common.conf;
    include global/wordpress.conf;
    include global/multisite.conf;
}
# More server blocks....

教程结束!

繁星资源博客致力于免费提供各种教程和资源与下载。在没有获得授权前禁止转载!侵犯了您的作品?可以进行邮件申诉,我们在审核后进行撤销。
繁星资源分享博客 » 如何使用Nginx配置单个和多个WordPress网站设置

发表评论

提供最优质的资源集合

立即查看 了解详情