LEMP代表的是(L:Linux OS,E:Nginx,M:MySQL/MariaDB, P:PHP),与之对应的是LAMP(唯一不同的是A,代表Apache网络服务器),由于Nginx轻量、高效的特性,LEMP在近来的WEB服务中的出镜率越来越高。为了追随潮流,在之前LAMP搭建Wordpress的基础上(Ubuntu16.04 WordPress建站教程),我又尝试了使用Nginx作为Wordpress的网络服务器,尽管遇到了各种各样的问题,但是取得了不错的效果。由于Nginx的配置十分复杂,于是有很多需要注意的地方。
常见网络服务器的优缺点
Nginx是十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题。
-
优点
- 轻量级,处理请求异步非阻塞,抗并发,高度模块化,有着Lighttpd的性能,且更稳定。
-
缺点
- Nginx在处理动态请求方面不如Apache。
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。但是对于那些需要更强大的Web应用服务器(比如大小、可定制、响应速度、可扩展性等方面)的人而言,Apache明显不符合他们的要求。
-
优点
- 兼容性和稳定性强,处理动态请求能力好。
-
缺点
- 体量大,在速度、性能不及其他轻量级WEB服务器,并且消费内存较高。
Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。
-
优点
- 轻量级,CPU占用低,效能好,模块丰富,对fastcgi支持非常好,比Apache性能更高。
-
缺点
- 稳定性没有Apache和Nginx好。
如果考虑网站的综合状况的话,比较理想的做法是Nginx做高并发、缓存、代理前端内容,而使用Apache处理后台动态内容。不过如果只是驱动Wordpress,单独使用Nginx就够了。
安装LEMP
安装过程和LAMP差不多,只是几个地方稍微不同。
sudo apt install nginx sudo systemctl status nginx.service
sudo apt install php7.0 php7.0-fpm
sudo apt install mariadb-server mariadb-client php7.0-mysql sudo systemctl restart php7.0-fpm.service
为了安全加固MariaDB,运行来自Ubuntu软件仓库中的二进制包提供的安全脚本,这会询问你设置一个root密码,移除匿名用户,禁用root用户远程登录,移除测试数据库等。
sudo mysql_secure_installation sudo mysql MariaDB> use mysql; MariaDB> update user set plugin='' where User='root'; MariaDB> flush privileges; MariaDB> exit mysql -u root -p -e 'show databases'
还有一些Wordpress会用到的模块,比如phpmyadmin和xmlrpc,安装完后需要重启PHP-FPM。
sudo apt install php7.0-mcrypt php7.0-mbstring php7.0-xml php7.0-xmrpc
到这里LEMP的安装工作就已经基本搞定了,接下来是最重要的配置环节。
配置Nginx
首先是主配置文件/etc/nginx/nginx.conf
user www-data www-data; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 60; client_max_body_size 15m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G; fastcgi_temp_path /tmp/wpcache/temp; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
然后是Wordpress的配置文件etc/site-enabled/wordpress.conf
server { listen 80 default_server; listen [::]:80 default_server; root /home/ubuntu/wordpress; index index.html index.php; server_name www.infiniture.cn; access_log /var/log/nginx/infiniture.com.access.log; error_log /var/log/nginx/infiniture.com.error.log; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/www.infiniture.cn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.infiniture.cn/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; if ($scheme != "https") { return 301 https://$host$request_uri; } location / { try_files $uri $uri/ /index.php?$args; rewrite /wp-admin$ $scheme://$host$uri/ permanent; } set $no_cache 0; if ($request_method = POST) { set $no_cache 1; } if ($query_string != "") { set $no_cache 1; } if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $no_cache 1; } if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { set $no_cache 1; } location ~ /wp-admin { location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_buffering off; add_header X-Accel-Buffering "no"; } } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_connect_timeout 600; fastcgi_send_timeout 600; fastcgi_read_timeout 600; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_cache_bypass $no_cache; fastcgi_no_cache $no_cache; fastcgi_cache WORDPRESS; fastcgi_cache_valid 200 301 302 1d; add_header X-Cache "$upstream_cache_status From $host"; } location ~ /purge(/.*) { allow 127.0.0.1; allow 182.254.246.42; deny all; fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1"; } location ~ /\. { deny all; } location ~* /(?:uploads|files)/.*\.php$ { deny all; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; access_log off; } }
以上配置中,需要说明的几个:
-
client_max_body_size 15m;
因为Wordpress里很多插件的体积比较大,如果不设置这个值的大小,会导致插件或者主题安装失败。 -
fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
这个包括下面的所有内容都是为了使 Nginx 缓存动态文件,参数对应的是缓存位置,缓存级别,缓存标识及大小,有效期,最大容量。 -
由于 Nginx 不支持 Apache 的 .htaccess 文件,因此无法使用 WordPress 自带的地址重写功能,需要自己添加相应的功能。
location / { try_files $uri $uri/ /index.php?$args; rewrite /wp-admin$ $scheme://$host$uri/ permanent; }
-
fastcgi_buffering off;
这个选项默认是开启的,它会把 fastcgi 返回的内容缓存起来,知道缓存空间满了之后一并输出,这会导致 WordPress 下更新时不会实时显示,而是更新完成后全部一起显示。关掉这个选项即可解决这个问题。 -
由于在线安装插件、主题需要等待的时间有时候会很长,因此如果不设置 fastcgi 的读写等待时长,很容易导致安装或者更新失败,因此需要设置如下内容。
- 为了更好管理动态文件缓存,我用了一个名为“Nginx hleper”的插件,为此增加了如下配置。
location ~ /purge(/.*) { allow 127.0.0.1; allow xxx.xxx.xxx.xxx; deny all; fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1"; }
原文链接:https://blog.csdn.net/liucheng2012560/article/details/80380001?ops_request_misc=&request_id=b6143a7f01d1440f932e0b28f8d8723b&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~koosearch~default-25-80380001-null-null.268%5Ev1%5Econtrol&utm_term=docker%E3%80%81wordpress%E3%80%81wordpress%E5%BB%BA%E7%AB%99%E3%80%81wordpress%E4%B8%BB%E9%A2%98%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81