Nginx配置
1. 常用配置项# 负载均衡两个服务upstream linuxidc {server 127.0.0.1:5000;server 127.0.0.1:6000;}server {listen 80;server_name flask_demo.mayanan.cn;location / {proxy_pass http://linuxidc;}}# 同一端口代理不同应用server {liste
1. 新建配置文件
在/etc/nginx/conf.d 新建文件default.conf
2. default.conf中的常用配置项
# 负载均衡两个服务
upstream linuxidc {
server 127.0.0.1:5000;
server 127.0.0.1:6000;
}
server {
listen 80;
server_name flask_demo.mayanan.cn;
location / {
proxy_pass http://linuxidc;
}
charset utf-8; # 设置支持utf-8
# 静态文件访问路径
location ^~ /static/ { # 注意:location 后面的路径名与最后一级目录名一致
# root /home/mayanan/docker_test03/; # 文件目录所在的地址
alias /home/mayanan/docker_test03/static/;
autoindex on; # 目录显示所有文件
# 对于txt和jpg文件,强制以附件形式下载,不要浏览器直接打开
if ($request_filename ~* ^.*?\.(txt|jpg|png)$) {
add_header Content-Disposition 'attachment';
}
}
}
# 同一端口代理不同应用
server {
listen 80;
server_name mayanan.cn;
location /baidu {
proxy_pass https://www.baidu.com/;
}
location /flask_demo {
proxy_pass http://flask_demo.mayanan.cn/;
}
location / {
proxy_pass http://127.0.0.1:8000/;
}
}
3. nginx主配置文件
Nginx的配置文件nginx.conf位于/etc/nginx/目录下;
nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location:
main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)
- main块设置的指令将影响其他所有设置;
- server块的指令主要用于指定主机和端口;
- upstream指令主要用于负载均衡,设置一系列的后端服务器;
- location块用于匹配网页位置。
这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。
4. nginx的全局配置
每个配置选项的含义解释如下:
- user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
- worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。
- error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
- pid是个主模块指令,用来指定进程pid的存储文件位置。
- worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用。
events事件指令是设定Nginx的工作模式及连接数上限:
use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。
worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效
参考链接:Nginx的配置文件详解(超详细)_wangbin_0729的博客-CSDN博客_nginx配置文件详解
6. Nginx配置文件示例
# 全局块
user www-data;
worker_processes 2; ## 默认1,一般建议设成CPU核数1-2倍
error_log logs/error.log; ## 错误日志路径
pid logs/nginx.pid; ## 进程id
# Events块
events {
# 使用epoll的I/O 模型处理轮询事件。
# 可以不设置,nginx会根据操作系统选择合适的模型
use epoll;
# 工作进程的最大连接数量, 默认1024个
worker_connections 2048;
# http层面的keep-alive超时时间
keepalive_timeout 60;
# 客户端请求头部的缓冲区大小
client_header_buffer_size 2k;
}
http { # http全局块
include mime.types; # 导入文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型
# 日志格式及access日志路径
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
# 允许sendfile方式传输文件,默认为off。
sendfile on;
tcp_nopush on; # sendfile开启时才开启。
# http server块
# 简单反向代理
server {
listen 80;
server_name domain2.com www.domain2.com;
access_log logs/domain2.access.log main;
# 转发动态请求到web应用服务器
location / {
proxy_pass http://127.0.0.1:8000;
deny 192.24.40.8; # 拒绝的ip
allow 192.24.40.6; # 允许的ip
}
# 错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 负载均衡
upstream backend_server {
server 192.168.0.1:8000 weight=5; # weight越高,权重越大
server 192.168.0.2:8000 weight=1;
server 192.168.0.3:8000;
server 192.168.0.4:8001 backup; # 热备
}
server {
listen 80;
server_name big.server.com;
access_log logs/big.server.access.log main;
charset utf-8;
client_max_body_size 10M; # 限制用户上传文件大小,默认1M
location / {
# 使用proxy_pass转发请求到通过upstream定义的一组应用服务器
proxy_pass http://backend_server;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
7. Nginx Location配置
Nginx Location配置是Nginx的核心配置,它负责匹配请求的url, 并根据Location里定义的规则来处理这个请求,比如拒绝、转发、重定向或直接提供文件下载。
URL匹配方式及优先级
Nginx的Location配置支持普通字符串匹配和正则匹配,不过url的各种匹配方式是有优先级的,如下所示:
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
!~ | 区分大小写的不匹配正则 | 5 |
!~* | 不区分大小写的不匹配正则 | 6 |
/ | 通用匹配,任何请求都会匹配到 | 7 |
为了加深你的理解,我们来看如下一个例子。由于规则2的优先级更高,当用户访问/static/
或则/static/123.html
时,Nginx会优先执行规则2里的操作,其它的的请求则会交由规则1执行。
# 规则1:通用匹配
location / {
}
# 规则2:处理以/static/开头的url
location ^~ /static {
alias /usr/share/nginx/html/static; # 静态资源路径
}
注意:上例中我们使用了alias
别名设置了静态文件所在目录,我们还可以使用root
指定静态文件目录。注意:alias
和root
是有区别的。
-
root
对路径的处理:root路径 + location路径 -
alias
对路径的处理:使用alias路径替换location路径
如果用root
设置静态文件资源路径,可以按如下代码设置。两者是等同的。
# 规则2:处理以/static/开头的url location ^~ /static { root /usr/share/nginx/html; # 静态资源路径 }
8. Nginx静态文件配置
Nginx可直接作为强大的静态文件服务器使用,支持对静态文件进行缓存还可以直接将Nginx作为文件下载服务器使用
静态文件缓存
缓存可以加快下次静态文件加载速度。我们很多与网站样式相关的文件比如css和js文件一般不怎么变化,缓存有效器可以通过expires
选项设置得长一些。
# 使用expires选项开启静态文件缓存,10天有效 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/big.server.com/static_files; expires 10d; }
9. 静态文件压缩
Nginx可以对网站的css、js 、xml、html 文件在传输前进行压缩,大幅提高页面加载速度。经过Gzip压缩后页面大小可以变为原来的30%甚至更小。使用时仅需开启Gzip压缩功能即可。你可以在http全局块或server块增加这个配置。
http {
# 开启gzip压缩功能
gzip on;
# 设置允许压缩的页面最小字节数; 这里表示如果文件小于10k,压缩没有意义.
gzip_min_length 10k;
# 设置压缩比率,最小为1,处理速度快,传输速度慢;
# 9为最大压缩比,处理速度慢,传输速度快; 推荐6
gzip_comp_level 6;
# 设置压缩缓冲区大小,此处设置为16个8K内存作为压缩结果缓冲
gzip_buffers 16 8k;
# 设置哪些文件需要压缩,一般文本,css和js建议压缩。图片视需要要锁。
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}
10. 文件下载服务器
Nginx也可直接做文件下载服务器使用,在location块设置autoindex
相关选项即可。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location /download {
# 下载文件所在目录
root /usr/share/nginx/html;
# 开启索引功能
autoindex on;
# 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
autoindex_exact_size off;
#显示本机时间而非 GMT 时间
autoindex_localtime on;
# 对于txt和jpg文件,强制以附件形式下载,不要浏览器直接打开
if ($request_filename ~* ^.*?\.(txt|jpg|png)$) {
add_header Content-Disposition 'attachment';
}
}
}
参考链接:万字长文看Nginx配置详解!
参考链接2:大江狗
更多推荐
所有评论(0)