使用Linux配置Nginx服务器

267 阅读4分钟

安装

打开终端,然后输入:

sudo apt-install nginx

启动、重启、停止

启动:

service nginx start

重启

service nginx reload

停止

service nginx stop

一般而言,在/var/www/html 这个文件夹内可以编写 nginx 的 html 文件。

有四个路径极为关键:

  • /usr/sbin/nginx:主程序

  • /etc/nginx:存放配置文件

  • /usr/share/nginx:存放静态文件

  • /var/log/nginx:存放日志

编写 Nginx 文件

设置静态 HTTP 服务器

设置静态 HTTP 服务器只需要在 http 模块下直接添加 server 即可。

work_processes 1;

events {
  worker_connecitons 1024;
}

http {
  server / {
    root /var/html/www/ # 静态服务器文件目录
  }
}

## 设置反向代理与负载均衡

直接在它的基础上添加 proxy_pass 即可:

work_processes 1; # CUP核心数

events {
  worker_connecitons 1024;
}

http {
  server / {
-    root /var/html/www/ # 静态服务器文件目录
+    proxy_pass http://192.168.1.1
  }
}

上面的一个代理是远远不够的,如果一个代理的挂掉了之后,那么这个服务器就无法使用,进而挂掉 HTTP 服务器。

既然如此,我们可以使用多个代理来解决这个问题:

work_processes 1; # CUP核心数

events {
  worker_connecitons 1024;
}

http {
+  upstream proxys {
+    server 123.123.123.1
+    server 123.124.123.2
+  }
  server / {
-    proxy_pass http://192.168.1.1
+    proxy_pass http://proxys
  }
}

这样就完成了负载均衡的配置。

设置页面缓存

首先,如果设置页面缓存,需要从 nginx 的两个层面入手:HTTPServer

HTTP

HTTP 层面考虑两个事情:timeoutcache chuncks.

timeout 代理超时

timeout 分为三种:连接时超时设置、连接前超时设置、连接后超时设置。

http {
+ proxy_connect_timeout 500;  # 连接时超时
+ proxy_read_timeout 500; # 连接前与服务器端连接的超时设置
+ proxy_send_timeout 500; # 连接后与服务器端响应的设置
  server / {
    proxy_pass 192.168.1.1:200
  }
}

这样就完成了超时设置。

设置缓存文件

使用proxy_buffer_sizeproxy_buffers配置缓存区。

  • proxy_buffer_size 是指代理缓存大小
  • proxy_buffers 代理请求缓存区的块

添加到 http 模块中:

http {
 proxy_connect_timeout 500;  # 连接时超时
 proxy_read_timeout 500; # 连接前与服务器端连接的超时设置
 proxy_send_timeout 500; # 连接后与服务器端响应的设置
+ proxy_buffer_size 128k;
+ proxy_buffers 4 128k; # 4块,每128k划分为一块
}

指定缓存文件,以及开辟缓存文件路径:

http {
 proxy_connect_timeout 500;  # 连接时超时
 proxy_read_timeout 500; # 连接前与服务器端连接的超时设置
 proxy_send_timeout 500; # 连接后与服务器端响应的设置
 proxy_buffer_size 128k;
 proxy_buffers 4 128k; # 4块,每128k划分为一块
+  proxy_temp_path /path/to/temp;
+  proxy_cache_path /path/to/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
}

最后在localtion层面上设置 cache 的选项,这一步是主要设置缓存时间:

localtion ~ \.html$ {
  proxy_cache cache_one;
  proxy_cache_valid 200 304 2m;
  proxy_cache_valid 301 302 1d;
  expires 30d;
}
  • proxy_cache 是指代理缓存的名字
  • proxy_cache_valid 是指代理缓存的设置时间,200,304 等是指 HTTP 状态码。而后面 2m 是指缓存 2 分钟。
  • expires 是指其余缓存的设置

另外要注意的是,开启代理缓存发现无法访问静态文件。

为了解决这个问题,你可以用这样的方法来解决:

location ~* \.(jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|css|js) {
  root /path/to/static;
}

开启 Gzip

开启 gzip,只需要开启在 http 层面开启gzip on

http {
  gzip on;
}

gzip_buffers gzip 压缩缓存

但是这样却有一个问题,如果并发高了的话,那么就会直接导致因为压缩文件时,CPU 的压力过高。

所以需要缓存这些gzip,如果没有设置的话,会直接向内存申请 Gzip 的压缩结果。

如果设置过后的话,它会以设置的数据大小的 4 倍单位,而进行申请内存。

所以设置缓存只需要写成这样子就可以:

http {
  gzip on;
+  gizp_buffers 4 4k;
}

gzip_min_lenght 最小压缩长度

除了使用 buffer 做缓存以外,我们还可以规定文件的指定大小进行压缩。

http {
  gzip on;
  gizp_buffers 4 4k;
+ gzip_min_lenght 1k;
}

建议大于或者等于 1k 进行压缩,因为小于 1k 会增加 CPU 加密的负担,从而增加 TCP 的连接时间。

gzip_type 压缩类型

我们可以指定压缩的类型,以达到速度更快的访问。

另外,我们开启一些文件类型压缩,因为这些的文件的收益比较大。

http {
    gzip on;
    gizp_buffers 4 4k;
    gzip_min_lenght 1k;
+   gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php  application/vnd.ms-fontobject font/ttf font/opentype font/x-woff;
}

上面的gzip类型分别是:

  • text/plain - 纯文本类型
  • application/javascript - javascript 类型
  • text/css - css 类型
  • application/xml xml 类型
  • application/vnd.ms-fontonject 微软的字体文件
  • font/ttf 字体文件
  • font/opentype 微软和 adobe 公司开发的字体文件
  • font/x-woff woff2 字体文件

gzip_http_version http 版本设置

最后别忘了使用 http_version,因为这个会决定是否存在真正的 gzip。

因为 upstream 之间的通信是按照 HTTP 1.0 进行通信的,所以避免没有开启 gzip,那么就得添加 http_version。

http {
    gzip on;
    gizp_buffers 4 4k;
    gzip_min_lenght 1k;
+   gzip_http_version 1.0;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php  application/vnd.ms-fontobject font/ttf font/opentype font/x-woff;
}

所以最后配置是:

http {
    gzip  on;
    gzip_vary on; # 开启gzip标识
    gzip_http_version 1.0; # gzip的http版本
    gzip_min_length 1k;
    gzip_buffers 32 4k;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php  application/vnd.ms-fontobject font/ttf font/opentype font/x-woff;
}