Nginx 网站服务
是一个高性能 轻量级web服务软件,
高新能:对http并发连接的处理能很高,单台处理器可支持30000-50000个并发请求,(一般设置在20000个左右)
轻量级:nginx软件很小,安装所需的空间很小
稳定性强:对系统资源消耗低
nginx 的主要功能:
1处理静态网页:html htm 图像
2 支持反向代理(实现负载均衡,负载均衡靠算法实现)
3 处理动内容的能力
4 一个nginx可以配置多个虚拟主机,每一个虚拟主机可以作为一个域名的站点,拥有独立的配置和资源
5 URL重定向:可以对URL 的请求进行修改和重定向
6 缓存机制,可以缓存静态文件的额动态内容
7 包含日志记录,服务日志,访问日志,报错日子 控制日志还是在/var/log/messsages
8 代理服务器,通过代理可以访问其他的后端服务器
2 Nginx 下面的文件
conf : 保存nginx的所有配置文件 其中nginx.conf是nginx的配置文件
html: 保存nginx的web 文件 .html为结尾的文件,图片
logs: 保存日志的日录,路径可以改
sbin: nginx 的二进制启动文件
html下面的
50x.html是nginx默认的报错提示页面
access.log 记录的是访问日志记录
error.log 记录的是报错日志
nginx-t 检测nginx配置文件以及配置文件的语法是否正确
被http占用
nginx -v 只是查看nginx的版本
nginx -V 查看版本 和nginx支持的配置模块
nginx -s stop restart reload 给nginx主程序发送信息,不能开启nginx服务
如何安装nginx:
1、systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2、安装依赖包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
3、创建运行用户、组
(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
4、编译安装Nginx
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/
cd nginx-1.22.0/
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
5、make && make install
6、chown -R nginx.nginx /usr/local/nginx #修改权限
7、ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ #让系统识别nginx的操作命令
8、vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/run/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
#相当于重启
ExecStop=/bin/kill -s TERM $MAINPID
#相当于stop
[Install]
WantedBy=multi-user.target
#支持多用户模式
9、mkdir -p /usr/local/nginx/run/
#创建目录
10、vim /usr/local/nginx/conf/nginx.conf
#修改配置文件
pid /usr/local/nginx/run/nginx.pid;
#找到 pid的位置修改
11、systemctl daemon-reload
#重新加载配置
12、systemctl start nginx.service
nginx配置文件
user nobody;
运行用户,默认使用nginx。
worker_processes 1;
工作进程数量,根据服务器的CPU数来填写或根据访问量来选择(硬件条件满足的情况下)。
pid /usr/local/nginx/run/nginx.pid;
PID文件的完整。
events {
worker_connections 1024;
}
nginx服务端可以同时并发的连接数,最多只有1024个。
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 logs/access.log main;
sendfile on;
支持文件的下载功能。
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
连接保持时间65。
#gzip on;
开启页面的压缩功能。
server {
listen 80;
虚拟主机的监听端口,多个虚拟主机端口的区分。
server_name localhost;
站点的域名
#charset koi8-r;
charset utf-8
配置字符的默认编码,支持中文
#access_log logs/host.access.log main;
location /liu {
匹配URI的路径,也是名称 / 配置的家目录下
root /opt;
匹配的是安装路径当中位置 html
alias /opt/liu;
alias 加全部路径 不能与上面的拼接
index index.html index.htm;
都是index开头,而且.html .htm
只能修改了系统配置文件(Vim /etc/security/limits.conf #限制系统打开的配置文件
) 才能限制连接数
注意:设置保存后,需要重新ssh连接才会看到配置更改的变化
vim /etc/security/limits.conf#最大进程数的软限制 65535
#最大进程数的硬限制65535
#打开文件的限制最大65535
修改之后只能重启
Iptables 修改内核文件 用sysctl -p 直接生效 但是这里的limits.conf 必须要重启reboo
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指定目录下的;
Nginx的功能模块
proxy:代理功能 核心的模块之一,配置反向代理的功能
proxy_passz指定 定义在locationg中,根据location来的
headers功能模块:
处理请求和头部的响应信息,获取客户端的真实ip
upstream模块:
七层方向代理模块,只能配置在http模块中,或者stream模块中这里配置
Stream :四层反向代理模块,只能写在全局配置当中
只能写在http模块上面 或者最下面