1. 核心概念理解
#location匹配命令
# ~ 表示执行一个正则匹配,区分大小写
# ~* 表示执行一个正则匹配,不区分大小写
# ^~ 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
# = 进行普通字符精确匹配
# @ 定义一个命名的location,使用在内部定向时,例如 error_page, try_files
#
# =前缀的指令严格匹配这个查询。如果找到,停止搜索。
# 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
# 正则表达式,在配置文件中定义的顺序。
# 如果第3条规则产生匹配的话,结果被使用。否则,如同从第2条规则被使用。
#
# location 匹配的优先级(与location在配置文件中的顺序无关)
# = 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
# 普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
# ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。
# 最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
# location = / { # 只匹配"/".
# [ configuration A ]
# }
#
# location / { # 匹配任何请求,因为所有请求都是以"/"开始,但是更长字符匹配或者正则表达式匹配会优先匹配
# [ configuration B ]
# }
#
# location ^~ /images/ { # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
# [ configuration C ]
# }
#
# location ~* \.(gif|jpg|jpeg)$ { # 匹配以 gif, jpg, or jpeg结尾的请求. 但是所有 /images/ 目录的请求将由 [Configuration C]处理.
# [ configuration D ]
# }
2.配置实际使用
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
#include 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 logs/access.log main;
# 简单文件服务下载功能,本地文件可以下载
#autoindex on;# 显示目录
#autoindex_exact_size on;# 显示文件大小
#autoindex_localtime on;# 显示文件时间
#sendfile on; # 高效传输文件0拷贝
#server {
# charset utf-8,gbk;
# listen 9050 default_server;
# listen [::]:9050 default_server;
# server_name _;
# root D:\\test\\;
# location / {
# if ( $request_filename ~* ^.*?\.(html|doc|pdf|zip|docx|txt)$){
# add_header Content-Disposition attachment;
# add_header Content-Type application/octet-stream;
# }
# }
#}
# 图片文件预览功能,jpg可以预览,png预览为乱码
#server {
# listen 8088;
# server_name localhost;# 域名为localhost
# charset utf-8,gbk;
#
# location / {
# root D:\\test\\nginx-1.18.0\\picture\\;
# index index.html index.htm;
# if ( $request_filename ~* ^.*?\.(doc|zip|docx|txt)$){
# add_header Content-Disposition attachment;
# add_header Content-Type application/octet-stream;
# }
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root html;
# }
#
#}
#HTTP服务器
#server {
# #监听80端口,80端口是知名端口号,用于HTTP协议
# listen 80;
# #定义使用www.xx.com访问需要hosts配置
# server_name localhost;
# #首页
# index index.html
# #指向webapp的目录
# root D:\\workspace\\spring-shiro\\src\\main\\webapp;
# #编码格式
# charset utf-8;
#
# #代理配置参数
# proxy_connect_timeout 180;
# proxy_send_timeout 180;
# proxy_read_timeout 180;
# proxy_set_header Host $host;
# proxy_set_header X-Forwarder-For $remote_addr;
#
# #反向代理的路径(和upstream绑定),location 后面设置映射的路径
# location / {
# proxy_pass http://zp_server1;
# }
#
# #静态文件,nginx自己处理,re 匹配开头
# location ~ ^/(images|javascript|js|css|flash|media|static)/ {
# root D:\\spring-shiro\\src\\main\\webapp\\views;
# #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
# expires 30d;
# }
#
# #设定查看Nginx状态的地址
# location /NginxStatus {
# stub_status on;
# access_log on;
# auth_basic "NginxStatus";
# auth_basic_user_file conf/htpasswd;
# }
#
# #禁止访问白名单设计,ip
# location ~ /api/{
# deny 10.11.110.20;
# deny 10.11.110.30;
# allow 10.1.1.9;
# allow 10.8.76.4;
# deny all;
# }
#
# #错误处理页面(可选择性配置)
# #error_page 404 /404.html;
# #error_page 500 502 503 504 /50x.html;
# #location = /50x.html {
# # root html;
# #}
#}
#server {
# listen 8088;
# server_name localhost;# 域名为localhost
# charset utf-8,gbk;
#
# location / {
# root D:\\test\\nginx-1.18.0\\picture\\;
# index index.html index.htm;
# # 下载为文件的配置
# if ( $request_filename ~* ^.*?\.(doc|zip|docx|txt)$){
# add_header Content-Disposition attachment;
# add_header Content-Type application/octet-stream;
# }
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root html;
# }
#
#}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
https://github.com/dunwu/nginx-tutorial