Nginx 学习总结(2) —— 基本配置
这是 Nginx
学习总结的第二篇,上一篇介绍到了 Nginx 学习总结(1) —— 概述,这一篇会对 Nginx
的基本配置做一些总结。
Nginx
配置信息主要分为六大部分: main(全局设置)
、events(事件设置)
、http(HTTP服务器设置)
、 sever(虚拟主机设置)
、location(URL匹配设置)
、upstream(反向代理设置)
。
main 模块
user nobody nobody;
worker_processes auto;
error_log /usr/local/var/log/nginx/error.log error;
pid /usr/local/var/run/nginx/nginx.pid;
worker_rlimit_nofile 1024;
-
user
指定 Worker 进程的运行用户以及用户组,默认由 nobody 运行; -
worker_processes
设置 Nginx 要开启的 Worker 进程数。最优值取决于许多因素,包括(但不限于)CPU 内核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的 CPU 内核数将是一个好的开始(设置为auto
将尝试自动检测它); -
error_log
指定全局错误日志的输出文件位置和错误级别。日志级别有debug
、info
、notice
、warn
、error
、crit
、alert
、emerg
可供选择,错误级别依次递增。设置某个日志级别将记录指定的以及错误级别更高的所有消息(即debug
输出日志最为最详细,而emerg
输出日志最少)。默认开启为error
。想要开启debug
错误级别,需要在编译 Nginx 时指定--with-debug
参数; -
pid
指定记录 PID 进程的存储文件位置( Nginx 向 Worker 进程发送信号时,需要知道是在向哪个进程发送信息,而不同的进程有不同的 PID),用户仅需创建该空白文件即可; -
worker_rlimit_nofile
设置每个 Worker 进程可以打开的最大文件数目(如果不设置该选项,则该选项的值为操作系统的限制值,使用“ulimit -a”命令可查看)。
events 模块
events {
use epoll;
worker_connections 1024;
}
-
use
设置事件处理模型。Nginx 支持的事件处理模型有:select
、poll
、kqueue
、epoll
、rtsig
和/dev/poll
,其中 kqueue(BSD 特有) 和 epoll(Linux 特有) 都是高效的事件处理模型。如果不设置,Nginx 将会自动选择一个最适合当前操作系统的事件处理模型; -
worker_connections
设置每个 Worker 进程能并发处理的最大连接数。最大客户端连接数由worker_processes
和worker_connections
决定:Nginx 作为 HTTP 服务器时,Max_clients = worker_processes * worker_connections
;Nginx 作为反向代理时,Max_clients = worker_processes * worker_connections / 4
。
http 模块
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 /usr/local/var/log/nginx/access.log main;
#access_log off
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
# gzip压缩功能设置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
client_max_body_size 10M;
client_body_buffer_size 128k;
# http_proxy 设置
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
-
include
加载 mime.type 文件,用于帮助 Nginx 识别文件的 MIME 类型; -
default_type
指定文件默认的 MIME 类型。例如,在没有配置 asp 的环境时,Nginx 是不予解析的,此时,浏览器访问 asp 文件就会出现下载了; -
log_format
设置日志的格式; -
access_log
设置 access_log 日志文件地址; -
sendfile
是否开启高效文件传输模式。将tcp_nopush
和tcp_nodelay
两个指令设置为 on 用于防止网络阻塞; -
keepalive_timeout
设置客户端连接保持活动的超时时间,在超过这个时间之后,服务器会关闭该连接; -
gzip
是否开启 gzip 压缩,这将会减少我们发送的数据量; -
client_max_body_size
允许客户端请求的最大单文件字节数。如果上传较大文件,请增加它的限制值; -
client_body_buffer_size
允许客户端请求的最大缓冲区字节数; -
proxy_connect_timeout
设置与后端服务器连接超时时间。
server 模块
server {
listen 80;
server_name localhost 192.168.12.10 jochen.com;
root /usr/www;
index index.php index.html index.htm;
charset utf-8;
error_page 404 /404.html;
error_page 403 /403.html;
error_page 500 502 503 504 /50x.html;
access_log usr/local/var/log/host.access.log main;
aerror_log usr/local/var/log/host.error.log error;
}
-
listen
设置监听端口,默认 80,小于 1024 的要以root
用户启动。可以为listen *:80
、listen 127.0.0.1:80
等形式; -
server_name
设置域名,多个域名之间用空格分开; -
root
设置虚拟主机的默认网站根目录; -
index
定义默认访问的文件名; -
charset
设置网页的默认编码格式; -
error_page
设置错误页面,相对于上面的root
目录。
location 模块
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
location /nginx-status {
stub_status on;
allow 192.168.10.100;
allow 172.29.73.0/24;
deny all;
}
location
模块用于针对某些特定的 URL 进行配置,有关 location 匹配规则详情请见《Nginx 学习总结(3) —— location 模块》。
upstram 模块
upstream jochen.com {
ip_hash;
server 192.168.12.1:80;
server 192.168.12.2:80 down;
server 192.168.12.3:8080 max_fails=3 fail_timeout=20s;
server 192.168.12.4:8080;
}
upstream 模块用于负载均衡,有关 upstream 模块详情请见《Nginx 学习总结(7) —— 负载均衡》。
参考文章:
PHP 学习总结
研读官网文档和网络优秀个人文章,对 PHP 编程相关作出学习总结。
被 1 篇内容引用
推荐阅读
PHP 微服务集群搭建
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通。每个服务...
Jochen赞 112阅读 14.2k评论 6
如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:
API7_技术团队赞 8阅读 8.6k评论 2
有了 NGINX 和 Kong,为什么还需要 Apache APISIX?
2021 年 5 月,云原生社区技术沙龙·广州站,API7.ai(支流科技)联合创始人 & CTO,Apache APISIX PMC 王院生在活动上做了《有了 NGINX 和 Kong,为什么还需要 Apache APISIX》的分享,以下是现场分享的文字版。...
API7_技术团队赞 1阅读 4.2k
Nginx 配置常用参数,看这一篇就够了
最近在全面学习Nginx,当作笔记了,如有错误,欢迎指出或深入交流。主模块 {代码...} 事件模块 {代码...} http部分 {代码...} 部分参数详细说明server_name {代码...} location {代码...} location表达式类型 {代...
开源到赞 2阅读 1.9k
化虹为桥 - Nginx 如何代理 UDP “连接”
众所周知,UDP 并不像 TCP 那样是基于连接的。但有些时候,我们需要往一个固定的地址发送多个 UDP 来完成一个 UDP 请求。为了保证服务端能够知道这几个 UDP 包构成同一个会话,我们需要在发送 UDP 包时绑定某个端...
spacewander赞 4阅读 1.6k
Nginx unexpected end of file 配置证书遇到问题,如何解决?
通过 letsencrypt 申请证书后,默认服务器安装了 Nginx 1.8 发现,在默认的 /etc/nginx/sites-enabled/default 内容配置 SSL 的 site.com.key 后。重启 Nginx 出现一下错误:
程序员泥瓦匠赞 1阅读 1.2k
mac M1 nginx配置文件位置
mac nginx配置的原位置/usr/local/etc/nginx/nginx.confmac M1 nginx配置位置/usr/local/Homebrew/etc/nginx/nginx.confnginx -t 查看位置
寿兽阅读 3k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。