nginx配置是什么
什么是Nginx?
Nginx(发音为“engine x”)是一个高性能的HTTP和反向代理服务器,它最初是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,目的是解决C10K问题(即同时处理1万个并发连接),Nginx是一个开源软件,可以在类Unix操作系统(如Linux)上运行,它具有高并发、高性能、低内存占用等特点,因此在Web服务器领域得到了广泛应用。
(图片来源网络,侵删)Nginx配置是什么?
Nginx配置是指通过编辑Nginx配置文件(通常位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf),来定义Nginx服务器的行为,配置文件包含了诸如虚拟主机、负载均衡、反向代理、缓存策略等许多设置,通过修改配置文件,可以实现对Nginx服务器的各种定制化需求。
Nginx配置的基本结构
Nginx配置文件主要包括以下几个部分:
1、全局块:包含影响整个服务器的设置,如工作进程数、错误日志路径等。
(图片来源网络,侵删)2、events块:定义了与事件驱动相关的设置,如连接数上限、请求缓冲区大小等。
3、http块:包含最核心的设置,如默认站点、负载均衡策略等。
4、server块:定义了一个虚拟主机,包括监听端口、根目录、默认文档等设置。
(图片来源网络,侵删)5、location块:定义了特定URL路径的处理规则,如反向代理、重写规则等。
6、keepalive_timeout指令:定义长连接超时时间。
7、access_log和error_log指令:分别定义访问日志和错误日志的路径及格式。
8、include指令:用于引入其他配置文件,实现模块化管理。
9、root指令:定义网站根目录。
10、index指令:定义默认首页文件名。
11、try_files指令:按顺序尝试文件或目录,返回第一个存在的资源。
12、proxy_pass指令:定义反向代理目标地址。
13、return指令:定义响应状态码及内容。
14、sendfile指令:启用或禁用高效传输模式。
15、tcp_nopush指令:控制TCP_NODELAY是否使用Nagle算法。
16、gzip指令:启用或禁用gzip压缩。
17、fastcgi_pass指令:定义FastCGI服务器地址。
18、fastcgi_param指令:传递给FastCGI程序的参数。
19、uwsgi_param指令:传递给uWSGI应用程序的参数。
20、ssl_certificate和ssl_certificate_key指令:定义SSL证书及其密钥路径。
21、resolver指令:定义DNS解析器。
22、server_name指令:定义虚拟主机名称。
23、location ~\.(jpg|jpeg|gif|png|ico|css|js)$指令匹配静态文件资源的URL路径。
24、location ~\.(xml|txt)$指令匹配文本文件的URL路径。
25、location ~\.(html|htm)$指令匹配HTML文件的URL路径。
26、location ~\.(asp|php|jsp)$指令匹配动态生成的网页文件的URL路径。
27、location /$\{\$uri\}$指令:根据URI进行重写。
28、location ^~ /static/$指令:匹配以/static/开头的URL路径,将其映射到指定目录。
29、location ^~ /assets/$指令:匹配以/assets/开头的URL路径,将其映射到指定目录。
30、if ($http_user_agent ~* MSIE) $http_user_agent = "MSIE"; 判断客户端浏览器类型并设置User-Agent头信息。
31、if ($http_user_agent ~* Chrome) $http_user_agent = "Chrome"; 判断客户端浏览器类型并设置User-Agent头信息。
32、log_format main '$remote_addr $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; 将访问日志格式化为可读的形式。
33、access_log /var/log/nginx/access.log main; 定义访问日志路径及格式。
34、error_log /var/log/nginx/error.log warn; 定义错误日志路径及级别(warn表示警告级别)。
35、sendfile on; 开启高效传输模式。
36、keepalive_timeout 65; 设置长连接超时时间为65秒。
37、client_max_body_size 100M; 限制客户端请求主体的最大值为100M。
38、large_client_header_buffers 4 8k; 为大头部分配缓冲区大小。
39、client_body_buffer_size 128k; 设置客户端请求主体缓冲区大小为128k。
40、client_header_buffer_size 1k; 设置客户端请求头部缓冲区大小为1k。
41、proxy_buffering off; 关闭代理缓冲,提高性能。
42、proxy_read_timeout 90; 设置代理读取超时时间为90秒。
43、proxy_connect_timeout 30; 设置代理连接超时时间为30秒。
44、proxy_send_timeout 30; 设置代理发送超时时间为30秒。
45、proxy_next_upstream error timeout invalid_header http_0xx http_to_https; 定义后端服务器失败时的重试策略。
46、upstream backend { server backend1.example.com; server backend2.example.com; }; 定义后端服务器列表及权重。
47、upstream cache { server cache1.example.com; server cache2.example.com; }; 定义缓存服务器列表及权重。
48、server { listen 80; server_name example.com; root /usr/share/nginx/html; index index.html index.htm; error_page 500 502 503 504 @error; location = /favicon.ico$ iicon; location = /robots\.txt$ text disposable=yes allow=all; location ~ \*\* \.(jpg|jpeg|gif|png|ico|css|js)$ iimage autoindex on; location ~ \*\* \.(xml|txt)$ text index index.html index.htm index.txt default type text/plain charset=utf-8 expires=30d; location ~ \*\* \$.(html|htm)$ try_files $uri $uri/ @fallback; location @fallback {'sub_filter'} subdomains multifallback off; location ~* \$.(html|htm)$ subdomains multifallback on; location ~* \*\*(?!\*\/*) \$.(html|htm)$ subdomains multifallback off; location ~* \*\*\/* \$.(html|htm)$ subdomains multifallback on; location ~* \*\*\/\* \$.(html|htm)$ subdomains multifallback off; log_format main '[$time_local] $remote_addr $status $body_bytes_sent ' '"$request" $host' ' '"$http_referer" "$http_user"' ' '"$http_user" "$http_x_forwarded"' ' '"$http_referer" "$http_user" "$httpx-forwarded-for"' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" "$status" $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent' ' '"$scheme" "$host" "$request" $status $bodyBytesSent'; access_log logs/access-main.log main; error_log logs