linux之nginx服务
Nginx服务
- nginx是什么
- nginx官方仓库安装
- nginx配置文件详解
- 多IP、多域名、多端口部署服务
nginx是什么
nginx ("engine x")是一个HTTP web服务器,反向代理,内容缓存,负载均衡器,TCP/UDP代理服务器和邮件代理服务器
稳定版本 nginx-1.26.2
https://nginx.org/en/linux_packages.html
nginx官方稳定版仓库
# vi /etc/yum.repos.d/nginx.repo
# 需要手动修改$releasever 为centos7版本,目前使用的是kylin 关闭校验gpgcheck=0
[root@web01 yum.repos.d]# cat nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
#yum安装 指定repo 默认从nginx.repo安装
yum install nginx --enablerepo=nginx.repo
#检测nginx仓库是否安装成功
[root@web01 yum.repos.d]# yum repolist
repo id repo name
epel Extra Packages for Enterprise Linux 7 - x86_64
ks10-adv-os Kylin Linux Advanced Server 10 - Os
ks10-adv-updates Kylin Linux Advanced Server 10 - Updates
nginx-stable nginx stable repo
#安装nginx ,nginx安装会先检测是否有nginx.repo仓库 然后是自有仓库 然后是扩展仓库
[root@web01 yum.repos.d]# yum -y install nginx
[root@web01 yum.repos.d]# rpm -qa |grep nginx
nginx-1.26.1-2.el7.ngx.x86_64
#nginx安装之后的目录文件树
[root@web01 yum.repos.d]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.26.1
/usr/share/doc/nginx-1.26.1/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
#查询nginx包
[root@web01 yum.repos.d]# rpm -qa |grep nginx
nginx-1.26.1-2.el7.ngx.x86_64
#查询nginx的配置文件
[root@web01 yum.repos.d]# 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
/etc/nginx/uwsgi_params
nginx配置文件详解
[root@web01 nginx]# cat nginx.conf
#核心配置
user nginx; #nginx安装会默认创建虚拟用户nginx
worker_processes auto; #nginx启动多少个线程处理 根据内核数量自动创建 当虚拟机给定1核心,那么默认启动为1个work_process
error_log /var/log/nginx/error.log notice; #nginx 错误日志记录位置
pid /var/run/nginx.pid; #nginx 启动主进程pid号位置,kill -9 `/var/run/nginx.pid`
#事件模块
events {
worker_connections 1024; #nginx每个工作进程(worker_process)支持的连接数量
}
#http协议 客户端和服务端传输数据参数配置
http {
include /etc/nginx/mime.types; #服务端默认支持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"';
#客户端IP |客户端用户名http认证 |请求时间 |(客户端请求的完整 HTTP 请求行 包括方法、URI 和协议版本)|响应的状态码 |服务端响应的字节数不包括响应头 |http_referer |http请求的UA头 |http_x_forwarded_for 用于代理服务器 显示原始请求的客户端 IP 地址
access_log /var/log/nginx/access.log main; #把以上参数写入access.log文件中
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; #客户端建立tcp连接,客户端无任何请求后,服务端最大保持65秒后自动断开
#gzip on; #数据压缩传输
include /etc/nginx/conf.d/*.conf; #把conf.d 下的所有配置文件引入到http模块中
}
/etc/nginx/conf.d/default.conf
在此conf.d目录下,可自建多个配置文件
[root@web01 conf.d]# cat default.conf
server {
listen 80; #监听端口 10.0.0.7:80
server_name localhost; #域名 公网配置 无域名 可用下划线代替 _
#access_log /var/log/nginx/host.access.log main; #指定此服务的访问日志
location / {
root /usr/share/nginx/html; # root 这里指网站的业务源代码位置
index index.html index.htm; # index 后跟网站的默认主页
}
#error_page 404 /404.html; # 如果用户访问不存在的路径,默认返回 html/404.html文件
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; # 错误状态码 返回指定/50x.html文件
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ { #正则匹配,客户端请求uri路径以.php结尾,交由127.0.0.1:80 处理
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ { #正则匹配,客户端请求uri路径以.php结尾,由本地127.0.0.1:9000端口的php程序处理
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht { .htaccess 该配置目的是防止 .htaccess 文件在 Apache 和 nginx 配置共享相同文档根目录时被外部用户访问,从而提高安全性。
# deny all;
#}
}
listen 80 端口监听详解
监听端口 | 作用 | 应用场景 |
---|---|---|
listen 80 | 只要能与本地网卡IP建立连接,即可访问此80端口,内部IP和外部IP | 适用于希望服务器接受来自任何网络接口的流量 |
listen 10.0.0.7:80 | 只能与IP10.0.0.7本地网卡建立连接,才可访问80端口,其它IP无法访问 | 适用于有多个网卡的服务器,仅希望某个特定网卡上的流量访问该服务 |
listen 0.0.0.0:80 | 所有 IPv4 地址(所有网卡)上的 80 端口,外部访问也可以 | 适用于接受所有 IPv4 网络接口上的流量(通常是默认设置) |
listen 127.0.0.1:80 | 仅监听本地回环地址(127.0.0.1 )上的 80 端口,只允许本地访问 |
适用于只允许本机访问该服务的情况(例如,数据库管理界面、开发环境等) |
多IP、多域名、多端口部署服务
1.多IP部署
# 2个网卡 1个网卡多个IP
# 同一个网卡再添加1个IP
ip add add 10.0.0.77/24 dev ens33
inet 10.0.0.7/24 brd 10.0.0.255 scope global noprefixroute ens33
inet 10.0.0.77/24 scope global secondary ens33
1.部署game
# 修改game网站配置文件 位于 /etc/nginx/conf.d/game.conf
[root@web01 conf.d]# cat game.conf
server {
listen 10.0.0.7:80;
server_name _;
#access_log /var/log/nginx/host.access.log main;
location / {
root /game;
index index.html index.htm;
}
}
#nginx -t检测配置是否正确
[root@web01 game]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 创建game网站代码目录
mkdir /game
# 上传代码
[root@web01 game]# ll
total 9620
-rw-r--r-- 1 root root 28032 May 24 2021 bgm.mp3
drwxr-xr-x 2 root root 23 May 24 2021 css
-rw-r--r-- 1 root root 7890373 Dec 6 17:23 game.zip
drwxr-xr-x 2 root root 23 May 24 2021 images
-rw-r--r-- 1 root root 8956 May 24 2021 index.html
drwxr-xr-x 2 root root 213 May 24 2021 js
-rw-r--r-- 1 root root 1904843 Dec 6 17:23 renzhegame.tar.gz
drwxr-xr-x 2 root root 4096 May 24 2021 roms
-rw-r--r-- 1 root root 811 May 24 2021 shuoming.html
# 重启服务
systemctl restart nginx
#检测nginx监听端口所在的IP
[root@web01 game]# netstat -lntup |grep nginx
tcp 0 0 10.0.0.7:80 0.0.0.0:* LISTEN 2576/nginx: master
#测试 使用127.0.0.1:80 访问被拒绝
[root@web01 game]# curl 127.0.0.1:80
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused
#使用10.0.0.77:80 访问被拒绝
[root@web01 game]# curl 10.0.0.77:80
curl: (7) Failed to connect to 10.0.0.77 port 80: Connection refused
#使用10.0.0.7:80 请求成功
[root@web01 game]# curl -I 10.0.0.7:80
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Sun, 08 Dec 2024 03:59:43 GMT
Content-Type: text/html
Content-Length: 8956
Last-Modified: Sun, 23 May 2021 22:50:22 GMT
Connection: keep-alive
ETag: "60aadc2e-22fc"
Accept-Ranges: bytes
2.部署renzhe
#编辑renzhe配置文件
[root@web01 conf.d]# cat renzhe.conf
server {
listen 10.0.0.77:80;
server_name _;
#access_log /var/log/nginx/host.access.log main;
location / {
root /renzhe;
index index.html index.htm;
}
}
#检测配置文件
[root@web01 renzhe]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#创建忍者目录
mkdir /renzhe
#上传代码
[root@web01 renzhe]# ll
total 2008
drwxr-xr-x 2 root root 40 Mar 5 2024 _build
drwxr-xr-x 2 root root 40 Mar 5 2024 css
drwxr-xr-x 2 root root 63 Mar 5 2024 data
-rw-r--r-- 1 root root 78923 Mar 5 2024 icon.png
-rw-r--r-- 1 root root 1660 Mar 5 2024 index.html
drwxr-xr-x 3 root root 74 Mar 5 2024 media
drwxr-xr-x 2 root root 6 Dec 8 12:04 renzhegame
-rw-r--r-- 1 root root 1904843 Dec 6 17:23 renzhegame.tar.gz
drwxr-xr-x 2 root root 59 Mar 5 2024 sounds
-rw-r--r-- 1 root root 59813 Mar 5 2024 下载.png
drwxr-xr-x 2 root root 41 Mar 5 2024 水印图
#重启服务
systemctl restart nginx
#查看端口 10.0.0.77:80端口已正常运行
[root@web01 renzhe]# netstat -lntup |grep nginx
tcp 0 0 10.0.0.77:80 0.0.0.0:* LISTEN 2706/nginx: master
tcp 0 0 10.0.0.7:80 0.0.0.0:* LISTEN 2706/nginx: master
#请求成功
[root@web01 renzhe]# curl -I 10.0.0.77:80
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Sun, 08 Dec 2024 04:08:51 GMT
Content-Type: text/html
Content-Length: 1660
Last-Modified: Tue, 05 Mar 2024 12:05:31 GMT
Connection: keep-alive
ETag: "65e70a8b-67c"
Accept-Ranges: bytes
# ETag(实体标签)是一个用于标识特定版本的资源的标识符。当文件内容变化时,ETag 也会变化。客户端可以使用 ETag 与 If-None-Match 头进行缓存验证。如果文件没有变化,服务器可以返回 304 状态码,而不需要重新传输数据。
2.多域名部署
# 使用同一IP,多个域名对应
# 修改game配置文件如下
[root@web01 conf.d]# cat game.conf
server {
listen 10.0.0.7:80; #IP地址保持不变
server_name www.game.com; #修改域名
#access_log /var/log/nginx/host.access.log main;
location / {
root /game;
index index.html index.htm;
}
}
# 修改renzhe配置文件如下
[root@web01 conf.d]# cat renzhe.conf
server {
listen 10.0.0.7:80; #IP地址保持不变
server_name www.renzhe.com; #修改域名
#access_log /var/log/nginx/host.access.log main;
location / {
root /renzhe;
index index.html index.htm;
}
}
#nginx -t 检测配置文件
[root@web01 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
#重启服务
systemctl restart nginx
#修改windows hosts文件 添加如下
10.0.0.7 www.game.com www.renzhe.com
#本地测试dns解析
PS C:\Users\User> ping www.game.com
正在 Ping www.game.com [10.0.0.7] 具有 32 字节的数据:
来自 10.0.0.7 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.7 的回复: 字节=32 时间<1ms TTL=64
10.0.0.7 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
Control-C
PS C:\Users\User> ping www.renzhe.com
正在 Ping www.game.com [10.0.0.7] 具有 32 字节的数据:
来自 10.0.0.7 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.7 的回复: 字节=32 时间<1ms TTL=64
#通过浏览器访问
www.game.com
www.renzhe.com
3.多端口部署
#同一IP通过不同端口 实现访问
#修改game配置文件如下
[root@web01 conf.d]# cat game.conf
server {
listen 10.0.0.7:80; #这里修改game配置文件监听端口为80
server_name _; #域名不配置
#access_log /var/log/nginx/host.access.log main;
location / {
root /game;
index index.html index.htm;
}
}
#修改renzhe配置文件如下
server {
listen 10.0.0.7:81; #这里修改renzhe配置文件监听端口为81
server_name _; #域名不配置
#access_log /var/log/nginx/host.access.log main;
location / {
root /renzhe;
index index.html index.htm;
}
}
#检测配置文件
[root@web01 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
#重启服务
systemctl restart nginx
#查看端口监听 80和81
[root@web01 conf.d]# netstat -lntup |grep nginx
tcp 0 0 10.0.0.7:80 0.0.0.0:* LISTEN 2877/nginx: master
tcp 0 0 10.0.0.7:81 0.0.0.0:* LISTEN 2877/nginx: master
#通过IP:PORT 方式进行访问
[root@web01 conf.d]# curl -I 10.0.0.7:80
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Sun, 08 Dec 2024 04:27:25 GMT
Content-Type: text/html
Content-Length: 8956
Last-Modified: Sun, 23 May 2021 22:50:22 GMT
Connection: keep-alive
ETag: "60aadc2e-22fc"
Accept-Ranges: bytes
[root@web01 conf.d]# curl -I 10.0.0.7:81
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Sun, 08 Dec 2024 04:27:29 GMT
Content-Type: text/html
Content-Length: 1660
Last-Modified: Tue, 05 Mar 2024 12:05:31 GMT
Connection: keep-alive
ETag: "65e70a8b-67c"
Accept-Ranges: bytes
Never try,never know