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
posted @ 2024-12-08 13:11  被时光移动的城市  阅读(23)  评论(0编辑  收藏  举报