docker-compose.yaml配置信息如下
version: '3' services: nginx: # 容器名称 container_name: nginx # 默认nginx:latest image: nginx # 自启动 restart: always # 宿主机端口80:容器默认端口80 ports: - 80:80 # 文件映射 volumes: - ./conf/nginx.conf:/etc/nginx/nginx.conf - ./conf/conf.d/:/etc/nginx/conf.d/ - ./html/:/usr/share/nginx/html/ - ./logs/:/var/log/nginx/ # 时区设置 environment: - TZ=Asia/Shanghai 3. 常用命令进入nginx的sbin目录中
./nginx -v:查看nginx版本号
./nginx: 启动nginx
./nginx -s stop: 停止nginx
./nginx -s quit: 优雅的停止服务
./nginx -s reload:重新加载nginx(不是重启)
nginx -t <指定配置文件路径>: 查看配置文件书写是否正确
4. 配置文件 4.1 结构
全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
server块:配置虚拟主机的相关参数,一个http中可以有多个server。
location块:配置请求的路由,以及各种页面的处理情况,一个 server 块可以配置多个 location 块。
#全局块 ... #events块 events {...} #http块 http { #http全局块 ... #server块 server { #server全局块 ... #location块 location [PATTERN] {...} location [PATTERN] {...} } server {...} #http全局块 ... } 4.2 配置信息 4.2.1 nginx.conf/etc/nginx/nginx.conf
user nginx; # nginx 会使用这个指定的用户启动工作进程( worker process) worker_processes 1; # 允许生成的worker process数,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约 error_log /var/log/nginx/error.log warn; # 错误日志存放路径 pid /var/run/nginx.pid; # 进程PID存放路径 events { worker_connections 1024; # 每个worker process可以同时支持的最大连接数 } 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; # 访问日志存储路径 并指定了日志格式为main sendfile on; # 允许sendfile方式传输文件,可以在http块,server块,location块 keepalive_timeout 65; # 连接超时时间 include /etc/nginx/conf.d/*.conf; # 引入/etc/nginx/conf.d/ 下的所有配置文件,使其生效 } 4.2.2 default.conf/etc/nginx/conf.d/default.conf
server { # 监听所有的ipv4的地址 端口80 listen 80; # 监听所有的ipv6的地址 端口80 listen [::]:80; # 本虚拟主机的名称或 IP 配置 server_name localhost; # 字符集 #charset koi8-r; # 访问日志地址及日志格式 #access_log /var/log/nginx/host.access.log main; # 匹配所有请求 location / { # 访问的根目录 root /usr/share/nginx/html; # 访问默认页 index index.html index.htm; } # 重定向访问系统404页面至 /404.html; #error_page 404 /404.html; # 重定向系统错误页面到指定的静态页面 /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } 4.3 location 语法该指令用于匹配URL
语法如下
location [ = | ~ | ~* | ^~] /uri/ {...}= : 用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
~ : 用于表示 uri 包含正则表达式,并且区分大小写
~* : 用于表示 uri 包含正则表达式,并且不区分大小写
!~ : 用于表示 uri 包含正则表达式, 并且区分大小写不匹配
!~* : 用于表示 uri 包含正则表达式,并且不区分大小写不匹配
^~ : 用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配
注意: 如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识
5. 反向代理实现效果: 用户访问nginx服务,通过nginx将请求代理到后台服务中。
5.1 实例1
启动一个后台服务student其端口为8080,项目启动后直接在地址栏上访问localhost:8080,返回I am student