關於NGINX配置、HTTPS


关于NGINX配置、HTTPS/SSL、HTTP2、缓存

微信搜索【前端全栈开发者】关注这个脱发、摆摊、卖货、持续学习的程序员,第一时间阅读最新文章,会优先两天发表新文章。关注即可大礼包,准能为你节省不少钱!

以全栈工程师的身份在TECH行业工作必须了解NGINX的配置及其核心功能!在这篇文章中,我将向你介绍有关NGINX配置的所有方法,以及如何安装、添加SSL、HTTP 2、GZIP等。

安装

到nginx.org下载兼容的源代码,我用的是1.19.2,或者用下面的命令下载:

<code>$  wget http://nginx.org/download/nginx-1.19.2.tar.gz/<code>

提取文件

<code>$ tar -zxvf nginx-1.19.2.tar.gz /<code>

改变目录,并检查你是否有 build-essential l包(c编译器),如果没有就需要安装。

<code>$ cd nginx-1.19.2

# 安装编译器
$ sudo apt install build-essential

# 现在检查它是否有效
$ ./configure/<code>

安装完成后,下一步是安装一些基本的依赖项

<code>$ sudo apt install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev/<code>

其中:

  • libpcre3

    是PCRE库(Perl),用于实现正则表达式模式
  • zlib1g

    用于GZIPING
  • 用于SSL的

    libssl-dev

    ,以制作自签名证书

现在让我们自己安装NGINX服务器,以root权限运行下面的命令,让他们自定义配置完成。

<code># ./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/<code>

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

<code>$ sudo make
$ sudo make install/<code>

完成所有操作后,运行 server nginx 命令,是否可以正常工作?如果没有错误,检查Nginx ps aux | grep nginx 的过程或直接访问 http://localhos / 就可以看到!

添加systemd系统

systemd 允许我们使用一些很棒的功能,比如启动、重启、停止、重载。意味着我们已经熟悉systemd了,所以不需要每次都运行 nginx -s stop ...

要配置systemd,只需从网站上抓取代码,并以root权限保存为 /lib/systemd/system/nginx.service 文件,还需要对文件进行一些修改,在编辑器中打开 `/lib/systemd/system/nginx.service 文件,并进行如下修改。

<code>[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/<code>

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

<code>$ sudo systemctl start nginx/<code>

下载并提供简单模板

从这里下载任何模板来制作一个Demo网站,也可以使用root权限建立名为 /sites/demo 的目录。

<code>$ sudo mkdir -p /sites/demo/<code>

解压缩下载的模板并将其复制到 /sites/demo。

用你喜欢的编辑器打开Nginx配置文件 /etc/nginx/nginx.conf,删除文件中的所有代码,并添加以下内容。

<code>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;
    }
}/<code>

现在通过命令重新加载nginx worker(进程),当你做了任何改变时,你需要运行这个命令。

<code>$ sudo systemctl reload nginx/<code>

并在浏览器中访问 localhost,你看到了吗? 如果你做的一切都对,那么你就能看到它了!

添加SSL和HTTP 2

在 /etc/nginx 下创建一个名为 ssl 的新目录,这样就变成了 /etc/nginx/ssl,你还记得我们在一开始安装了一个软件包libssl-dev 吗,现在是时候拿它来工作了。首先,我们需要使用 openssl 命令创建一个自签名证书。

<code>$ sudo openssl req -x509 -days 10 -nodes -newkey rsa:2048 -keyout /etc/nginx/ssl/self.key -out /etc/nginx/ssl/self.crt/<code>

完成后,填写所有必需的输入,它会在 /et/nginx/ssl 目录下为你提供两个文件 slef.crt 和 self.key。打开 /etc/nginx/nginx.conf 文件

<code>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;
        }
    }
}/<code>

重启nginx服务 sudo systemctl reload nginx,然后访问https://localhost,通过https和HTTP 2查看Web开发工具列表,或者使用curl确认。

<code>$ 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;/<code>

首先我们上Gzipping,其次使用压缩3级,级别越高Nginx会使用更多的资源,而且会压缩到很小,所以最好保持4、3级。CSS和javascript文件类型将被压缩

<code>listen 443 ssl http2;

# 添加SSL自签名证书
ssl_certificate /etc/nginx/ssl/self.crt;
ssl_certificate_key /etc/nginx/ssl/self.key;/<code>

我们启用 443 端口,ssl 和 http2,我们在一开始就已经安装了这些依赖 --with-http_ssl_module 和 --with-http_v2_module。接下来,我们导入一个自签名证书和用于加密请求的密钥

<code>location ~* \.(css|js|jpg|png)$ {
     add_header Cache-Control public;
     add_header Pragma public;
     add_header Vary Accept-Encoding;
     expires 1M;
}/<code>

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

感谢你的阅读,希望你喜欢它并从本文章中学到一些东西。

My Github Profile: https://github.com/dunzib

最近整理了一份优质视频教程资源,想要的可以关注我然后私信“666”即可免费领取哦!如果文章对你有所启发和帮助,可以点个关注、收藏、转发,也可以留言讨论,这是对作者的最大鼓励。


分享到:


相關文章: