Nginx
Nginx
1、HTTP协议的流程
1、DNS解析
2、给对应的服务器建立对应的连接
3、发送请求报文
4、响应请求报文,同时发送请求主体
5、断开TCP连接
2、HTTP协议中的报文包含哪几部分?
1、基础信息
2、请求报文
3、响应报文
4、响应主体
3、常见的请求方式
GET : 读的过程
POST : 写的过程
PUT : 改的过程
DELETE : 删的过程
4、常见的响应状态码
1xx : 通知信息
2xx : 成功
3xx : 重定向
4xx : 客户端错误
5xx : 服务端错误
5、请解释pv、uv以及独立IP
pv : 页面浏览量
uv :独立用户(设备)
ip : 独立IP
2.Nginx是什么
Nginx是web服务软件
Nginx是一个开源且高性能、可靠的http web服务、代理服务
#特点
开源:直接获取源代码(免费的)
高性能:支持海量开发
可靠:服务稳定
Nginx是俄罗斯的一个程序员开发的
Nginx是代理服务(python服务,可以用nginx代理,把它变成一个web服务软件)
3.Nginx和apache之间对比
Nginx(使用epoll)
apache(开发的版本比较早)select
网络模型
select 性能最低
poll 性能稍好
epoll 性能最强
4.安装Nginx
4.1 yum安装(推荐) web01安装
官网:nginx.org
4.1.1 官方源(推荐)
①sudo yum install yum-utils(可做可不做)
②vim /etc/yum.repos.d/nginx.repo,创建nginx.repo并编写
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
③yum clean all(清空缓存)
④如果有epel源记得给他注释掉(改个名字),否则会影响nginx官方源
⑤yum makecache(从新生成缓存)
⑥yum install nginx 下载nginx
Repository 显示 nginx-stable 证明从nginx官方源下载的
⑦rpm -qc nginx 查看nginx的配置文件
[root@web01 nginx]# rpm -qc nginx
/etc/logrotate.d/nginx
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/nginx.conf #这个是最重要的所有配置文件都在这里配置
/etc/nginx/scgi_params
4.1.2 epel源 web02安装
①cd /etc/yum.repos.d这个目录下如果没有epel源 去编辑epel.repo,内容如下 ,然后清空缓存并从新生成
[epel]
name="epel源"
baseurl=https://repo.huaweicloud.com/epel/7/x86_64/
gpgcheck=0
②如果有epel 执行 yum install nginx
Repository :epel 从epel仓库下载的
③执行rpm -qc nginx
[root@web02 ~]# rpm -qc nginx
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf #重要的
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
4.2 源代码编译安装(自定义安装)web03安装 需要源代码包http://nginx.org/download/nginx-1.20.1.tar.gz
4.2.1 下载源代码包
[root@web03 ~]# wget http://nginx.org/download/nginx-1.20.1.tar.gz
4.2.2解压
[root@web03 ~]# tar -xf nginx-1.20.1.tar.gz
4.2.3 进入解压目录设置系统参数
[root@web03 ~]# cd nginx-1.20.1
[root@web03 nginx-1.20.1]# ./configure --help
[root@web03 nginx-1.20.1]# ./configure --with-http_ssl_module --with-http_v2_module --with-stream
--with-http_ssl_module 配置https使用
--with-http_v2_module 配置golong使用
--with-stream 配置tcp/udp,
后面跟什么就启用什么
4.2.4可能出现的错误
1、./configure: error: SSL modules require the OpenSSL library.
yum install openssl openssl-devel -y
2、./configure: error: HTTP rewite module require the PCRE library.
yum install pcre pcre-devel -y
前面下载的openssl 是它本身的包,后面的openssl-devel是他的扩展包
4.2.5 make编译 (会消耗cpu)
[root@web03 nginx-1.20.1]# make
4.2.6 make install 编译下载
[root@web03 nginx-1.20.1]# make install
4.2.7 现在执行nginx显示找不到命令,需要加入到环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/nginx/sbin
[root@web03 nginx]# source /etc/profile 然后重载一下这个文件 source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。该命令通常用命令“.”来替代。
[root@web03 ~]# nginx -v 测试一下成功否,显示了版本,成功了
nginx version: nginx/1.20.1
4.2.8 加入system系统管理
[root@web03 ~]# vim /usr/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/logs/nginx.pid
#/usr/local/nginx/sbin路径记得写正确
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
4.2.9 重载一下system服务并启动
[root@web03 ~]# systemctl daemon-reload
[root@web03 ~]# systemctl start nginx
5.Nginx常用命令详讲
[root@web03 ~]# nginx -h
nginx version: nginx/1.20.1
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
[-e filename] [-c filename] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/nginx/)
-e filename : set error log file (default: logs/error.log)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file
-------------------------------------------------------------
nginx -h : 打开帮助信息
nginx -v : 展示nginx的版本号 #常用
nginx -V : 展示nginx版本号和配置参数
nginx -t : 测试配置文件 #常用
nginx -T : 测试配置文件并打印
nginx -q : 静默输出错误信息
nginx -s : 向nginx发送信号(stop 停止,关机,quit 退出,reopen重新打开nginx(先关在开),reload重载配置文件) #常用
nginx -p : 指定运行的家目录 (默认是:/usr/share/nginx/)
nginx -e : 设置错误日志的路径
nginx -c : 设置配置文件 (默认是:/etc/nginx/nginx.conf) #常用
nginx -g : 临时设置配置项(给配置文件设置一个全局的配置项) #常用
------------------------------------------------------------------------------------
[root@web02 ~]# nginx -V #显示版本和配置选项信息,然后退出
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie
############################内容解析#######################################
nginx version: nginx/1.18.0 #nginx版本
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) #
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments:
--prefix=/etc/nginx #nginx文件的安装路径,其它选项如果使用相对路径,那么以此路径为基础路径
--sbin-path=/usr/sbin/nginx #二进制程序的安装目录
--modules-path=/usr/lib64/nginx/modules #模块安装路径
--conf-path=/etc/nginx/nginx.conf #设置nginx的conf文件路径
--error-log-path=/var/log/nginx/error.log #设置nginx错误日志路径
--http-log-path=/var/log/nginx/access.log #设置nginx的访问日志路径
--pid-path=/var/run/nginx.pid #设置nginx的pid文件路径
--lock-path=/var/run/nginx.lock #设置lock文件临时存放的路径
--http-client-body-temp-path=/var/cache/nginx/client_temp #设置http客户端主体临时缓存路径
--http-proxy-temp-path=/var/cache/nginx/proxy_temp #设置http反向代理临时路径
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp #设置http的fastcgi临时缓存路径
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp #设置uwsgi临时目录
--http-scgi-temp-path=/var/cache/nginx/scgi_temp #scgi临时存放目录
--user=nginx #设置启动 worker 进程时所使用的非特权用户名
--group=nginx #设置启动 worker 进程时所使用的非特权用户组名
--with-compat
--with-file-aio
--with-threads
--with-http_addition_module
--with-http_auth_request_module
--with-http_dav_module
--with-http_flv_module
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_mp4_module
--with-http_random_index_module
--with-http_realip_module
--with-http_secure_link_module
--with-http_slice_module
--with-http_ssl_module
--with-http_stub_status_module
--with-http_sub_module
--with-http_v2_module
--with-mail
--with-mail_ssl_module
--with-stream
--with-stream_realip_module
--with-stream_ssl_module
--with-stream_ssl_preread_module
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
6.Nginx的配置文件
Nginx的进程模型
角色:
master : 负责监控worker进程
worker :负责处理HTTP请求
[root@web02 ~]# vim /etc/nginx/nginx.conf
# 工作进程启动用户
user nginx;
# 启动的worker进程数
worker_processes auto;
# 指定错误日志的路径
error_log /var/log/nginx/error.log notice;
# 指定nginx进程的PID
pid /var/run/nginx.pid;
# 配置事件
events {
# worker进程中最大的连接数
worker_connections 1024;
}
# http配置模块
http {
# include 是将其他文件导入进来
include /etc/nginx/mime.types;
# default_type 指定nginx处理文件的默认类型
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 /var/log/nginx/access.log main;
# 高效读取文件
sendfile on;
#tcp_nopush on;
# 长连接的超时时间(连接上最多65秒还不释放,自动给你释放)
keepalive_timeout 65;
# 设置GZIP压缩
#gzip on;
# 加载其他的配置文件,包含网站的配置文件
include /etc/nginx/conf.d/*.conf;
}
game.conf
# 每一个server都代表一个网站(nginx是支持多个网站)
server {
# 指定当前网站的域名
server_name www.baidu.com;
# 指定当前网站的端口
listen 80;
# 指定一个访问路径
location / {
# 指定站点目录
root /opt/html;
# 指定默认访问的文件
index index.html;
}
}
7.搭建小游戏
1.上传代码到/usr/share/nginx/
[root@web02 nginx]# pwd
/usr/share/nginx
[root@web02 nginx]# ll
total 0
drwxr-xr-x 3 root root 136 Oct 26 15:48 html
drwxr-xr-x 3 root root 118 Oct 26 18:37 html5-mario
drwxr-xr-x 5 root root 56 Oct 26 18:37 jiaoben1765
2.增加网站配置(/etc/nginx/conf.d/)
[root@web02 conf.d]# cat game.conf
server{
server_name=cjml.com;
listen=80;
location / {
root /usr/share/nginx/html5-mario;
index index.html;
}
}
3.测试nginx配置文件是否正确
#出现ok 就是成功
[root@web02 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4.启动nginx
5.修改本机host文件dns解析
C:\Windows\System32\drivers\etc\hosts
加入
192.168.15.8 cjml.com
另一个
1.上传代码
2.增加网站配置(/etc/nginx/conf.d/)
[root@web02 conf.d]# cat game2.conf
server{
server_name qi.com;
listen 80;
location / {
root /usr/share/nginx/jiaoben1765;
index index.html;
}
}
3.测试nginx配置文件是否正确
[root@web02 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4.修改本机hosts
192.168.15.8 cjml.com
192.168.15.8 qi.com
5.重启nginx
systemctl restart nginx