更新日期:2023-06-16
曾经我是 Apache 的忠实拥趸,但后来我经常发现 Apache 的内存占用极其恐怖,一个进程可以占用几百M的内存,无论我怎么调整 Apache 配置都没有效果,我估计应该是某种原因导致其内存溢出了,而我找不到原因,即使修改 MaxConnectionsPerChild 参数也没有用。于是我就转投 NGINX 的怀抱了,自从用了 NGINX 之后,在 Debian 系统上使用 LNMP 搭建的 WordPress 博客只占用了300M左右的内存,再也没遇见过内存溢出的情况,腰也不疼了,气也不喘了,感觉倍儿有精神。Goodbye Apache!
注意事项:请使用纯净系统安装,该教程适用于 Debian 10与更新版本,默认使用root权限,#后面的文字为注释,切勿复制
在这篇教程中我将编译安装 NGINX ,编译安装的优点是能够安装最新版本的 NGINX 和 openssl、ngx_brotli 等组件、自定义性强,缺点则是过程较为繁琐,更新版本也较为复杂。
1、编译安装 NGINX + openssl + ngx_brotli
(1)首先安装编译 NGINX 的必要组件:
apt update && apt full-upgrade -y apt install build-essential libpcre3 libpcre3-dev zlib1g-dev git curl gnupg2 ca-certificates lsb-release unzip zip sudo wget curl xz-utils openssl gawk file net-tools -y #不一定所有都需要,但都是些实用组件
(2)为了支持 TLS 1.3与提高 NGINX 性能,我们需要添加 openssl 最新版和 ngx_brotli。
wget https://www.openssl.org/source/openssl-1.1.1u.tar.gz tar xvf openssl-1.1.1u.tar.gz && rm -rf openssl-1.1.1u.tar.gz mv openssl-1.1.1u openssl #下载openssl组件,如遇404错误则说明 openssl 已更新版本,可到官网查看最新版本 git clone https://github.com/google/ngx_brotli.git cd ngx_brotli git submodule update --init #下载ngx_brotli组件 cd ../
(3)做好安装前的准备后就现在可以开始下载 NGINX 并进行编译安装了。第7行为 NGINX 的默认编译参数 + openssl + ngx_brotli 组件。我这里已经将完善的编译参数列出,以后您想要了解新版本的 NGINX 默认安装参数的话,可以采用第二章节的方法先安装 NGINX 的最新版本,然后通过 nginx -V 命令获取。
wget https://nginx.org/download/nginx-1.24.0.tar.gz tar zxf nginx-1.24.0.tar.gz && rm -rf nginx-1.24.0.tar.gz mv nginx-1.24.0 nginx cd nginx/ ./configure --add-module=../ngx_brotli --with-openssl=../openssl --with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers' --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module make make install cd ../
(4)编译安装完 NGINX 后,为了能够正常使用,我们还需要进行一系列的设置,比如为 NGINX 添加系统服务:
vi /lib/systemd/system/nginx.service #编辑此文件 [Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target #将上述内容添加到 /lib/systemd/system/nginx.service,如果右键粘贴失败,可以修改 /usr/share/vim/vim82/defaults.vim 文件,将 set mouse=a 改为:set mouse-=a。
(5)为 NGINX 添加用户与用户组,和创建一些文件夹:
groupadd nginx useradd nginx -g nginx -c "nginx user" -d /var/cache/nginx -s /sbin/nologin mkdir -p /var/cache/nginx
(6)修改 NGINX 的配置文件:编辑 /etc/nginx/nginx.conf,可以直接将其修改为我的模板,不需要修改任何东西就可使用(此配置文件仅适用于完全按照上面步骤来编译安装的 NGINX,仅供参考):
user nginx; worker_processes auto; worker_rlimit_nofile 65535; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 65535; use epoll; multi_accept on; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; gzip on; gzip_vary on; gzip_comp_level 6; gzip_buffers 16 8k; gzip_min_length 1000; gzip_proxied any; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; brotli on; brotli_comp_level 6; brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; client_max_body_size 0; include /etc/nginx/conf.d/*.conf; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; }
(7)创建或编辑 /etc/nginx/conf.d/default.conf,以下是我的配置文件模板,可参考,但需要根据自己的情况修改一些内容,比如域名、证书等(此配置文件仅适用于完全按照上面步骤来编译安装的 NGINX):
server { listen 80; listen [::]:80; return 301 https://$host$request_uri; } server { listen 443 ssl http2 so_keepalive=on default_server; listen [::]:443 ssl http2 so_keepalive=on default_server; root /var/www/html; index index.php index.html; ssl_certificate /etc/nginx/fullchain.pem; ssl_certificate_key /etc/nginx/private.key; ssl_session_timeout 60m; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; add_header X-Content-Type-Options nosniff; add_header X-Xss-Protection 1; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_intercept_errors on; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } 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|svg)$ { expires max; log_not_found off; } }
(8)此时 NGINX 就已经安装并设置完毕了,可以用以下命令来设置 NGINX 为开机自动启动并立即启动 NGINX:
systemctl enable nginx systemctl start nginx
4、安装 PHP 7.4 常用组件,Debian 11可以直接 apt 安装
apt install php7.4-fpm php7.4-common php7.4-mysql php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip php7.4-soap php7.4-imap php7.4-imagick php7.4-bcmath -y
下一步还要修改一些 PHP 的配置文件,编辑 /etc/php/7.4/fpm/pool.d/www.conf 文件,确保下面两行的值与我列出的一模一样,否则可能会出错。
listen.owner = www-data listen.group = www-data
5、安装 MariaDB
apt install mariadb-server mariadb-client -y
安装完毕后需要进行数据库初始配置,并设置数据库密码:
mysql_secure_installation #使用此命令进行数据库初始配置,若第一步需要输入密码可直接回车键跳过 sudo mysql ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password; ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOURPASSWORD'; #替换 YOURPASSWORD 为你在刚才设置的密码
导入现有数据库(如果没有可跳过):
mysql -u root -p #如果前面已经输过了 sudo mysql 这个命令,就可以忽略这一步 create database yourdatabase; #请将yourdatabasename修改为您的数据库名称 use yourdatabase; set names utf8; source /root/yourdatabase.sql; #从文件目录中导入数据库,该路径只是示范
6、创建网站目录并赋权
mkdir -p /var/www/html #创建网站目录 usermod -a -G www-data nginx chown -R www-data /var/www/html #赋予权限
到这里 LNMP 的搭建就已经结束, 可以将网站文件上传至 /var/www/html 目录体验飞一般的感觉了。当然了,服务器线路不好的话还是飞不起来的。
博主你好,可以讲下怎么安装phpmyadmin吗
下载 phpMyAdmin,解压后把文件夹放到网站目录就好了,可以再用 chown -R www-data /var/www/html 命令赋一下权。
大佬添加nginx用户后,怎么用nginx 用户启动nginx