Nginx服务的主配置文件nginx.conf
#user nobody; #运行用户,若编译时未指定则默认为nobody
worker_processes 1; #工作进程数量,可配置成服务器内核数*2,如果网站访问量不大,一般设为1就够用了
#error_log logs/error.log; #错误日志文件的位置
#pid logs/nginx.pid; #PID文件的位置
events {
use epoll; #使用epoll模型, 2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 1024; #每个进程处理1024个连接
}
#如提高每个进程的连接数还需执行"ulimit -n 65535"命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)
#可使用"ulimit -a"命令查看系统允许当前用户进程打开的文件数限制。
注意:设置保存后,需要重新ssh连接才会看到配置更改的变化
vim /etc/security/limits.conf
# 65535 为Linux系统最大打开文件数
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
reboot
全局配置的六个模块简介:
全局块:全局配置,对全局生效;
events块:配置影响 Nginx 服务器与用户的网络连接;
http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
location块:用于配置匹配的 uri ;
注意:location 匹配的内容来源是来自网页的URI,而不是URL
(URL代表整个链接如:www.baidu.com/images/search,而URI则是/images/search。
所以nginx的location匹配的是URI)
Nginx的四大模块——proxy、headers、upstream、stream模块
Proxy 模块:
proxy 模块是 Nginx 的核心模块之一,用于实现反向代理功能。
它允许将客户端的请求代理到后端的服务器,并将响应返回给客户端。
proxy 模块支持 HTTP、HTTPS、FastCGI、uWSGI、SCGI 等多种协议。
通过配置 proxy_pass 指令,可以指定代理的后端服务器地址。
Headers 模块:
headers 模块用于处理 HTTP 请求和响应的头部信息。它允许添加、修改或删除请求头和响应头,
实现对头部信息的定制化控制。headers 模块提供了一系列的指令,
如 add_header、set_header、more_set_headers 等,用于操作头部信息。
Upstream 模块:
upstream 模块用于配置反向代理服务器组(也称为上游服务器组)。
它定义了后端服务器的列表和相关的负载均衡策略,用于分发请求到后端服务器。
upstream 模块通过 upstream 块来配置后端服务器组,其中包括 server 指令用于定义后端服务器。
Stream 模块:
stream 模块是 Nginx 的流处理模块,用于处理 TCP 和 UDP 流量。
它提供了 TCP/UDP 代理、负载均衡、数据包过滤等功能。stream 模块通过 stream 块来配置流的处理规则,
可以根据目标地址和端口等条件进行流量的转发和处理。
HTTP配置
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type appkgcation/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;
#支持文件发送(下载)
sendfile on;
#此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据) ,
此选项仅在使用sendfile的时候使用
#tcp_nopush on;
#连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip模块设置,设置是否开启gzip压缩输出
gzip on;
-------------------------------------------------------------------------------------------
日志格式设定:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,
通过$remote_add拿到的IP地址是反向代理服务器的iP地址。
反向代理服务器在转发请求的http头信息中,
可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
--------------------------------------------------------------------------------------------
# Web服务的监听配置
server {
#监听地址及端口
listen 80;
#站点域名,可以有多个,用空格隔开
server name www.kgc.com;
#网页的默认字符集
charset utf-8;
#根目录配置
location / {
网站根目录的位置/usr/local/nginx/html
root html;
#内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
#错误页面配置
location = /50x.html {
root html;
}
}
}
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.kgc.com;
systemctl restart nginx.service
echo "192.168.233.21 www.kgc.com" > /etc/hosts ---没有做正向解析,直接主机映射
访问浏览器
location常见配置指令,root、alias、proxy_pass(反向代理配置)
location /test {
root /var/www/html;
index index.html index.htm;
}
location /test {
alias /var/www/html/test;
index index.html index.htm;
}
nginx是通过alias设置虚拟目录,在nginx的配置中,alias目录和root目录是有区别的:
1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;