文章目录
- Nginx使用操作
-
- [1. 安装nginx](#1. 安装nginx)
- [2. docker启动nginx](#2. docker启动nginx)
- [3. 目录介绍](#3. 目录介绍)
- [4. 更改站点内容,初试一下(此步骤可以省略)](#4. 更改站点内容,初试一下(此步骤可以省略))
- [5. nginx配置文件结构](#5. nginx配置文件结构)
-
- [5.1 http配置示例](#5.1 http配置示例)
- [5.2 server配置](#5.2 server配置)
Nginx使用操作
- 服务器: ubuntu
- docker内操作nginx
1. 安装nginx
shell
# 1. 查询nginx版本
sudo docker search nginx
# 2. 可以查询下载指定版本,也可以默认下载最新版本
sudo docker pull nginx
下载后查询是否下载成功
执行sudo docker images
2. docker启动nginx
shell
sudo docker run -d -p 8000:80 --name=test_nginx nginx
- -d: 守护进程的形式启动
- -p: 将容器内的80端口映射到宿主机的8000端口上
- --name: 给nginx另起了个别名为
test_nginx
启动成功后执行sudo docker ps
查看运行情况
启动成功后,在浏览器访问IP + 8000
来查看是否运行成功
启动成功!!!!!!!!
3. 目录介绍
-
先进入容器内部
shellsudo docker exec -it test_nginx /bin/bash
注意: 进入容器后,Docker容器的基础镜像中没有包含你想要的软件包管理工具,例如
vim
命令都没有,此时如果出现vim
等基础命令不存在,请使用如下解决方案:shellapt-get update # 此步骤可能会很慢。。。。 apt-get install vim -y
-
日志目录
/var/log/nginx
: 日志目录- access.log: 访问日志
- error.log: 错误日志
/etc/nginx
: 配置文件目录- conf.d
- nginx.conf
/usr/share/nginx/html
: 站点html目录- index.html: nginx首页html代码
4. 更改站点内容,初试一下(此步骤可以省略)
将 Welcome to nginx!
更改成 Hey, old baby
vim /usr/share/nginx/html/index.html
修改完成之后 wq
保存退出
快捷键 ctrl + p + q
退出容器内
重启 nginx
shell
sudo docker restart test_nginx
效果:
5. nginx配置文件结构
- 全局快: 配置影响全局,包括运行nginx的用户组,进程存放,日志,配置文件等
- events: 影响nginx服务器和客户端的网络连接,包括进程最大的连接数,数据驱动和序列化等。
- http: 配置代理,缓存,日志,第三方模块等,可以嵌套多个server
- server: 配置虚拟主机的参数
- local: 配置路由请求,页面处理
- server: 配置虚拟主机的参数
-
worker_processes
: 这个是nginx服务器并发处理服务的关键配置,值越大,支持的并发量也就越多 -
events
: 主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。设置工作模式为epoll,除此之外还有select,poll,kqueue,rtsig和/dev/poll模式
worker_connections
: 最大连接数nginxevents { use epoll; worker_connections 1024; }
-
http
: Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里http全局块
: 全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。server
: 每个http块可以包含多个server块,每个server块就相当于一个虚拟主机,每个server块也可以包含多个location
块location
: 这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
5.1 http配置示例
nginx
http {
# 主模块命令,实现对配置文件所包含的文件的设定,减少主配置文件的复杂度
include /etc/nginx/mime.types;
# 核心模块命令,默认设置为二进制流
default_type application/octet-stream;
# 日志格式设定,main为日志格式的名称(可自定义)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 引用日志main的格式
access_log /var/log/nginx/access.log main;
# 是一个用于优化文件传输性能的指令。当这个指令设置为 on 时,Nginx 会使用操作系统的 sendfile 函数来输出文件,而不是自己读取文件并输出。sendfile 函数通常更高效,因为它可以直接从内核空间到用户空间发送数据,减少了数据在用户空间和内核空间之间的复制。
sendfile on;
# tcp_nopush 指令会告诉 Nginx 在一个数据包中尽可能多地发送数据,而不是为每个小数据包都发送一个。这可以减少网络上的小包数量,从而提高性能。
#tcp_nopush on;
# 用于设置长连接(keep-alive 连接)的超时时间。当一个连接在完成一个请求后保持打开状态,以便后续请求可以在同一个连接上发送时,这个设置就很有用。65 表示这个超时时间是 65 秒。如果一个连接在 65 秒内没有新的请求,Nginx 就会关闭这个连接。
keepalive_timeout 65;
#设置允许客户端请求的最大的单个文件字节数
client_max_body_size 20M;
#指定来自客户端请求头的headebuffer大小
client_header_buffer_size 32k;
#指定连接请求试图写入缓存文件的目录路径
client_body_temp_path /dev/shm/client_body_temp;
#指定客户端请求中较大的消息头的缓存最大数量和大小,目前设置为4个32KB
large_client_header_buffers 4 32k;
#设置客户端连接保存活动的超时时间
#keepalive_timeout 0; # 无限时间
keepalive_timeout 65;
#设置客户端请求读取header超时时间
client_header_timeout 10;
#设置客户端请求body读取超时时间
client_body_timeout 10;
server {
}
#gzip on;
# 引入 conf.d中的配置信息
# include /etc/nginx/conf.d/*.conf;
}
5.2 server配置
nginx
server {
#单连接请求上限次数
keepalive_requests 120;
#监听端口, HTTPS监听端口是443
listen 88;
#监听地址,可以是ip,最好是域名
server_name xxx.xxx.xxx.xxx;
#server_name www.xxx.com;
# SSL证书和私钥文件的位置
# ssl_certificate /path/to/your/certificate.pem;
# ssl_certificate_key /path/to/your/private.key;
# 其他SSL相关的配置,例如协议版本和加密套件
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers HIGH:!aNULL:!MD5;
#设置访问的语言编码
charset utf-8;
#设置虚拟主机访问日志的存放路径及日志的格式为main
access_log /www/wwwlogs/xxx.log main; #响应日志
error_log /www/wwwlogs/xxx.log main; #错误日志
#设置主机基本信息
#请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
location ~*^.+$ {
#根目录
root html;
#设置默认页
index index.html index.htm;
#拒绝的ip,黑名单
deny 127.0.0.1;
#允许的ip,白名单
allow 172.18.5.54;
}
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#SSL证书验证目录相关设置
location ~ \.well-known{
# 允许所有访问
allow all;
}
#图片资源配置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log off;
}
#网站js与css资源配置
location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log off;
}
# 配置代理到后端接口
location /api/ {
# 设置代理的后端服务器地址
proxy_pass http://backend_server_address/api/;
# 如果需要,修改传递给后端服务器的请求头
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_set_header X-Forwarded-Proto $scheme;
# 代理设置(可选)
proxy_connect_timeout 1s;
proxy_send_timeout 1s;
proxy_read_timeout 1s;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
# 如果后端服务器返回404,继续搜索其他location
proxy_intercept_errors on;
# 其他代理相关配置...
}
#访问异常页面配置
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}