关于 NGINX 配置、HTTPS/SSL、HTTP2、缓存
安装
下载简单模板并提供服务
添加 SSL 和 HTTP 2
要想在科技行业担任全栈工程师,了解 NGINX 的配置及其核心功能至关重要!在这篇文章中,我将带您了解有关 NGINX 配置的所有内容,包括如何安装、添加 SSL、HTTP 2、GZIP 等。
安装
只需前往nginx.org并下载兼容的源代码,我将使用 1.19.2 或使用以下命令下载它
$ wget http://nginx.org/download/nginx-1.19.2.tar.gz
提取文件
$ tar -zxvf nginx-1.19.2.tar.gz
更改目录,并检查是否有build-essential
包(c 编译器),如果没有,则需要安装它
$ cd nginx-1.19.2
# installing compiler
$ sudo apt install build-essential
# now check it works
$ ./configure
安装完成后,下一步是安装一些必要的依赖项
$ sudo apt install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
libpcre3
是用于实现正则表达式模式的 PCRE 库(Perl),用于SSL 的zlib1g
GZIPING ,用于制作自签名证书libssl-dev
现在让我们安装 NGINX 服务器本身,以 root 权限运行以下命令,让它们完成自定义配置
# ./configure --sbin-path=/usr/bin/nginx --conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/err.log --http-log-path=/var/log/nginx/access.log \
--with-pcre --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_v2_module
要了解上面使用的所有标志,现在我们可以通过使用 root 权限运行以下命令来编译和安装此源
$ sudo make
$ sudo make install
完成所有操作后,运行服务器nginx
命令,它正常工作了吗?如果没有错误,请检查 nginx 的进程ps aux | grep nginx
或访问http://localhost/,你会看到它,轰隆隆,你成功了!
添加 systemd 系统
systemd
允许我们使用一些很棒的功能,例如启动、重启、停止、启动时启动、重新加载。这意味着我们已经熟悉了,systemd
所以不需要每次都运行nginx -s stop
...
要配置 systemd,只需从网站获取代码并/lib/systemd/system/nginx.service
使用 root 权限将其保存为文件,仍然需要在文件中进行一些更改,在编辑器中打开文件/lib/systemd/system/nginx.service
并进行以下更改
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/bin/nginx -t
ExecStart=/usr/bin/nginx
ExecReload=/usr/bin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
现在再次保存文件并运行命令sudo systemctl daemon-reload
。现在使用 systemd 命令启动 Nginx
$ sudo systemctl start nginx
下载简单模板并提供服务
从此处下载任意模板以创建演示站点。同时使用 root 权限
创建名为的目录/sites/demo
$ sudo mkdir -p /sites/demo
解压下载的模板并复制到/sites/demo
。
使用您喜欢的编辑器打开 Nginx 配置文件/etc/nginx/nginx.conf
,从文件中删除所有代码并添加以下内容
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
index index.html;
server {
listen 80;
server_name localhost;
root /sites/demo;
index index.html;
}
}
现在通过命令重新加载 nginx 工作进程,当你进行任何更改时,你需要运行此命令
$ sudo systemctl reload nginx
并在浏览器中访问localhost
,你看到了吗?如果你做对了所有事情,你就能看到它!
添加 SSL 和 HTTP 2
ssl
创建一个名为的新目录,/etc/nginx
它变成了/etc/nginx/ssl
,你记得我们在开始时安装了一个包,libssl-dev
现在是时候让它工作了。首先,我们需要使用openssl
命令创建一个自签名证书
$ sudo openssl req -x509 -days 10 -nodes -newkey rsa:2048 -keyout /etc/nginx/ssl/self.key -out /etc/nginx/ssl/self.crt
填写所有必需的输入,完成后。它会在目录下slef.crt
给你两个文件。为了启用它,我们需要将这两个文件提供给 Nginx conf 文件。打开文件self.key
/et/nginx/ssl
/etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
index index.html;
gzip on;
gzip_comp_level 3;
gzip_types text/css;
gzip_types text/javascript;
server {
# adding 443 port, http2
listen 443 ssl http2;
server_name localhost;
# Adding SSL self-sign certificate
ssl_certificate /etc/nginx/ssl/self.crt;
ssl_certificate_key /etc/nginx/ssl/self.key;
root /sites/demo;
index index.php index.html;
location ~* \.(css|js|jpg|png)$ {
add_header Cache-Control public;
add_header Pragma public;
add_header Vary Accept-Encoding;
expires 1M;
}
}
}
重新加载 nginx 服务sudo systemctl reload nginx
并访问https://localhost
并查看 https 和 HTTP 2 上的网络开发工具列表,或使用curl
进行确认
$ curl -Ik -H 'Accept-Encoding: gzip, deflate' https://localhost/lovely.css
gzip on;
gzip_comp_level 3;
gzip_types text/css;
gzip_types text/javascript;
首先我们使用 Gzipping。其次使用 3 级压缩,级别越高,Nginx 占用的资源就越多,最终压缩到很小的尺寸,所以最好使用 4.3 级压缩。CSS
和 javascript 文件类型将被压缩。
listen 443 ssl http2;
# Adding SSL self-sign certificate
ssl_certificate /etc/nginx/ssl/self.crt;
ssl_certificate_key /etc/nginx/ssl/self.key;
我们启用443
端口,ssl
并且http2
,我们已经在开始时安装了这些依赖项--with-http_ssl_module
。接下来,我们导入自签名证书和密钥--with-http_v2_module
来
加密请求
location ~* \.(css|js|jpg|png)$ {
add_header Cache-Control public;
add_header Pragma public;
add_header Vary Accept-Encoding;
expires 1M;
}
.css
如果任何请求以、.js
、.jpg
和结尾,我们在这里使用正则表达式来匹配路径.png
。我们想添加一个额外的标头,例如向浏览器添加1M
一个月的缓存。
感谢您的阅读,希望您喜欢本课并从中学到一些东西。
我的 Github 个人资料:https://github.com/lifeeric
文章来源:https://dev.to/hasone/all-about-nginx-configuration-https-ssl-http2-caching-1c0i