下面将为您详细讲解“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。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化) - Python技术站