关于 NGINX 配置、HTTPS/SSL、HTTP2、缓存安装的所有信息下载简单模板并提供服务添加 SSL 和 HTTP 2

2025-05-28

关于 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
Enter fullscreen mode Exit fullscreen mode

提取文件

$ tar -zxvf nginx-1.19.2.tar.gz 
Enter fullscreen mode Exit fullscreen mode

更改目录,并检查是否有build-essential包(c 编译器),如果没有,则需要安装它

$ cd nginx-1.19.2

# installing compiler
$ sudo apt install build-essential

# now check it works
$ ./configure
Enter fullscreen mode Exit fullscreen mode

安装完成后,下一步是安装一些必要的依赖项

$ sudo apt install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
Enter fullscreen mode Exit fullscreen mode

libpcre3是用于实现正则表达式模式的 PCRE 库(Perl),用于SSL 的
zlib1gGZIPING ,用于制作自签名证书
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
Enter fullscreen mode Exit fullscreen mode

要了解上面使用的所有标志,现在我们可以通过使用 root 权限运行以下命令来编译和安装此源

$ sudo make
$ sudo make install
Enter fullscreen mode Exit fullscreen mode

完成所有操作后,运行服务器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
Enter fullscreen mode Exit fullscreen mode

现在再次保存文件并运行命令sudo systemctl daemon-reload。现在使用 systemd 命令启动 Nginx

$ sudo systemctl start nginx
Enter fullscreen mode Exit fullscreen mode

下载简单模板并提供服务

从此处下载任意模板以创建演示站点。同时使用 root 权限
创建名为的目录/sites/demo

$ sudo mkdir -p /sites/demo
Enter fullscreen mode Exit fullscreen mode

解压下载的模板并复制到/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;
    }
}
Enter fullscreen mode Exit fullscreen mode

现在通过命令重新加载 nginx 工作进程,当你进行任何更改时,你需要运行此命令

$ sudo systemctl reload nginx
Enter fullscreen mode Exit fullscreen mode

并在浏览器中访问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
Enter fullscreen mode Exit fullscreen mode

填写所有必需的输入,完成后。它会在目录下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;
        }
    }
}

Enter fullscreen mode Exit fullscreen mode

重新加载 nginx 服务sudo systemctl reload nginx并访问https://localhost并查看 https 和 HTTP 2 上的网络开发工具列表,或使用curl进行确认

$ curl -Ik -H 'Accept-Encoding: gzip, deflate' https://localhost/lovely.css
Enter fullscreen mode Exit fullscreen mode
    gzip on;
    gzip_comp_level 3;
    gzip_types text/css;
    gzip_types text/javascript;
Enter fullscreen mode Exit fullscreen mode

首先我们使用 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;
Enter fullscreen mode Exit fullscreen mode

我们启用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;
}
Enter fullscreen mode Exit fullscreen mode

.css如果任何请求以、.js.jpg结尾,我们在这里使用正则表达式来匹配路径.png。我们想添加一个额外的标头,例如向浏览器添加1M一个月的缓存。

感谢您的阅读,希望您喜欢本课并从中学到一些东西。

我的 Github 个人资料:https://github.com/lifeeric

文章来源:https://dev.to/hasone/all-about-nginx-configuration-https-ssl-http2-caching-1c0i
PREV
我的 2021 年学习计划 超棒算法
NEXT
3 个简单代码片段助你理解数组 .reduce()!🥳