nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)

  

下面将为您详细讲解“nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)”的完整攻略。

安装Nginx

首先,我们需要到官网(http://nginx.org/)下载最新的Nginx安装包,并进行解压。

tar -zxvf nginx-1.19.1.tar.gz

进入解压后的目录,输入以下命令进行编译和安装:

./configure
make
make install

编译配置时如果需要常用的配置库可以使用 --with-* 选项指定编译选项,例如需要开启 Gzip,可以使用 --with-http_gzip_static_module 选项进行编译。

安全配置

在默认情况下,Nginx的安全性较好,但是为了加强安全性,我们可以进行以下配置:

设置用户和用户组

首先,我们可以为Nginx设置一个专门的用户和用户组来运行Nginx服务,可以通过以下命令进行配置:

user  nginx;
worker_processes  auto;

这样配置可以让Nginx以nginx用户的身份进行运行。

禁止访问Nginx版本号

为了保护Nginx的安全性,我们应该尽可能地隐藏Nginx的版本信息,可以通过以下配置实现:

server_tokens off;

配置防火墙

为了更好地保护Nginx,我们可以使用防火墙来限制Nginx的开放端口。例如,我们可以使用iptables来阻止非授权的IP地址访问Nginx的端口:

iptables -A INPUT -p tcp --dport 80 -j DROP

配置防盗链

Nginx可以很容易地阻止未经授权的用户从其他网站上下载您的内容,可以通过以下配置实现:

location / {
  valid_referers none blocked *.baidu.com;
  if ($invalid_referer) {
    return 403;
  }
}

上述配置可以让Nginx只允许来自baidu.com的请求。

动静分离

在开发负载较大的网站时,我们可以使用Nginx来实现动静分离,可以将静态文件(例如JavaScript、CSS、图片等)放到Nginx的静态文件服务器中,而动态内容则由后端应用服务器提供。可以通过以下配置实现:

server {
  listen  80;
  server_name  example.com;

  location /static {
    alias /var/www/static;
  }

  location / {
    proxy_pass http://appserver;
  }
}

上述配置将/static开头的请求直接转发到静态文件目录,而其余的动态请求则转发到后端应用服务器。

配置HTTPS

在生产环境中,我们使用HTTPS加密协议来保护用户隐私和数据安全。可以通过以下配置实现:

server {
  listen  443;
  server_name  example.com;

  ssl  on;
  ssl_certificate  /etc/nginx/ssl/example.com.crt;
  ssl_certificate_key  /etc/nginx/ssl/example.com.key;

  location / {
    proxy_pass http://appserver;
  }
}

上述配置启用了HTTPS协议,并使用了SSL证书进行加密。

性能优化

为了提高Nginx的性能和稳定性,并减少资源的消耗,我们可以使用以下优化技术:

启用gzip压缩

gzip  on;
gzip_min_length  1000;
gzip_comp_level  5;
gzip_proxied  any;
gzip_types  text/plain text/html text/css application/json application/javascript application/xml;

上述配置启用了gzip压缩,它可以将响应数据进行压缩,减少传输的数据量,提高响应速度。

缓存配置

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
proxy_cache_valid 200 1d;

上述配置启用了反向代理服务器的缓存功能,避免重复的请求对后端服务器造成过大的负载压力,并提高了响应速度。

示例一

下面是一个示例配置文件:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log;

events {
  worker_connections  1024;
}

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;

  keepalive_timeout  65;

  server {
    listen  80;
    server_name  example.com;

    location /static {
      alias /var/www/static;
    }

    location / {
      proxy_pass http://appserver;
    }
  }

  server {
    listen  443;
    server_name  example.com;

    ssl  on;
    ssl_certificate  /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key  /etc/nginx/ssl/example.com.key;

    location /static {
      alias /var/www/static;
    }

    location / {
      proxy_pass http://appserver;
    }
  }

  server {
    listen  80;
    server_name  static.example.com;

    location / {
      root /var/www/static;
    }
  }

  server {
    listen  80;
    server_name  api.example.com;

    location / {
      proxy_pass http://api.example.com:8080;
    }
  }

  server {
    listen  80;
    server_name  download.example.com;

    location / {
      deny all;
    }

    location /download {
      valid_referers none blocked *.example.com;
      if ($invalid_referer) {
        return 403;
      }
    }
  }

  server {
    listen  80;
    server_name  example.com;

    location / {
      proxy_cache_bypass $http_pragma;
      proxy_cache_revalidate on;

      proxy_cache my_cache;

      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

      proxy_cache_valid 200 1d;
      proxy_pass http://backend;
    }
  }

  client_max_body_size 20M;
}

示例二

下面是一个简单的Nginx配置:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;

events {
  worker_connections  1024;
}

http {
  server {
    listen  80;
    server_name  example.com;

    location / {
      root /var/www/html;
      index  index.html index.htm;
    }
  }

  client_max_body_size 20M;
}

这个配置没有启用特殊的功能,只是用Nginx来提供静态网页服务,而且它也是一个单进程模式的Nginx。

相关文章