分布式 - 服务器Nginx:一小时入门系列之Nginx环境准备

文章目录

      • 1. Nginx 环境准备
      • 2. Nginx 安装和启动
      • 3. Nginx 常用命令
      • 4. Nginx 使用systemctl启动、停止、重新加载
      • 5. Nginx 配置文件
      • 6. Nginx 配置文件结构

1. Nginx 环境准备

虚拟机镜像,基于Centos7,网盘链接: https://pan.baidu.com/s/1NmCR-vdAcZLouRRn9V1yTA 密码: 1b60,虚拟机的用户名/密码:root/123456,使用的环境和应用放置在/home目录下:

目录简介说明
AdminLTE-3.2.0静态web后台管理系统静态web的配置演示
apps/ruoyi-admin.jar若依后台管理系统,基于springboot方向代理演示
apache-tomcat-8.5.81apps/ruoyi-admin.warjavaweb服务器动静分离演示
sql/ry_20210924.sqlsql/quartz.sql数据库初始化脚本创建若依后台数据库
mysql5.7数据库用户名/密码:root/123456
open-JDK 1.8java运行环境已安装

2. Nginx 安装和启动

① 关闭防火墙:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

② 使用yum安装:

sudo yum install yum-utils net-tools

③ 在 CentOS 系统中创建一个名为 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

这个文件是一个 YUM 软件包管理器的仓库配置文件,它指定了一个名为 nginx-stable 的仓库,其中包含了稳定版本的 Nginx 软件包。这个仓库的 URL 是 http://nginx.org/packages/centos/ r e l e a s e v e r / releasever/ releasever/basearch/,其中 $releasever 和 $basearch 是 CentOS 系统的变量,会被替换为相应的值。此外,这个仓库还启用了 GPG 检查,并指定了 GPG 密钥的 URL。最后,module_hotfixes 参数指定了是否启用模块热修复功能。

执行如下命令:

cat > /etc/yum.repos.d/nginx.repo << EOF
[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
EOF
sudo yum install nginx

3. Nginx 常用命令

nginx #立即停止
nginx -s stop#执行完当前请求再停止
nginx -s quit#重新加载配置文件,相当于restart
nginx -s reload#将日志写入一个新的文件
nginx -s reopen#测试配置文件
nginx -t

Nginx 日志位于/var/log/nginx/

4. Nginx 使用systemctl启动、停止、重新加载

systemctl start nginxsystemctl status nginx#产看日志
journalctl -xesystemctl stop nginxsystemctl reload nginx#配置开机启动
systemctl enable nginx

① 在centos 7中,用systemctl启动nginx可能出现如下错误:

[root@nginx-dev ~]# systemctl start nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.[root@nginx-dev ~]# systemctl status nginx
● nginx.service - nginx - high performance web serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)Active: failed (Result: exit-code) since Sun 2023-08-06 17:51:44 CST; 16s agoDocs: http://nginx.org/en/docs/Process: 2365 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)Aug 06 17:51:44 nginx-dev systemd[1]: Starting nginx - high performance web server...
Aug 06 17:51:44 nginx-dev nginx[2365]: nginx: [emerg] bind() to 0.0.0.0:8000 failed (13: Permission denied)
Aug 06 17:51:44 nginx-dev systemd[1]: nginx.service: control process exited, code=exited status=1
Aug 06 17:51:44 nginx-dev systemd[1]: Failed to start nginx - high performance web server.
Aug 06 17:51:44 nginx-dev systemd[1]: Unit nginx.service entered failed state.
Aug 06 17:51:44 nginx-dev systemd[1]: nginx.service failed.

这是由于selinux的安全策略引起的。解决方法如下:

  • setenforce 0 (临时)
  • 修改/etc/selinux/config,设置SELINUX=disabled (永久有效,需重启)

② 启动 nginx 报错:

[root@nginx-dev ~]# systemctl start nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.[root@nginx-dev ~]# systemctl status nginx.service
● nginx.service - nginx - high performance web serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)Active: failed (Result: exit-code) since Sun 2023-08-06 17:56:39 CST; 26s agoDocs: http://nginx.org/en/docs/Process: 2403 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)Aug 06 17:56:38 nginx-dev nginx[2403]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Aug 06 17:56:38 nginx-dev nginx[2403]: nginx: [emerg] bind() to 0.0.0.0:8000 failed (98: Address already in use)
Aug 06 17:56:39 nginx-dev nginx[2403]: nginx: [emerg] still could not bind()
Aug 06 17:56:39 nginx-dev systemd[1]: nginx.service: control process exited, code=exited status=1
Aug 06 17:56:39 nginx-dev systemd[1]: Failed to start nginx - high performance web server.
Aug 06 17:56:39 nginx-dev systemd[1]: Unit nginx.service entered failed state.
Aug 06 17:56:39 nginx-dev systemd[1]: nginx.service failed.

这是一个nginx启动错误,错误信息显示端口80已经被占用。这通常是因为另一个进程已经在监听该端口。您可以使用以下命令检查哪个进程正在使用该端口:

[root@nginx-dev ~]# sudo lsof -i :80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   2355  root    7u  IPv4  21150      0t0  TCP *:http (LISTEN)
nginx   2356 nginx    7u  IPv4  21150      0t0  TCP *:http (LISTEN)
nginx   2357 nginx    7u  IPv4  21150      0t0  TCP *:http (LISTEN)

这将显示所有正在使用端口80的进程的详细信息,包括进程ID(PID)和进程名称。您可以使用此信息来杀死该进程,例如:可以通过杀死该进程:

[root@nginx-dev ~]# sudo kill -9 2355
[root@nginx-dev ~]# sudo kill -9 2356
[root@nginx-dev ~]# sudo kill -9 2357 

另一种解决此问题的方法是更改nginx配置文件中的端口。可以编辑nginx配置文件(通常位于/etc/nginx/nginx.conf)并将端口更改为未被占用的端口。然后,重新启动nginx服务以使更改生效:

[root@nginx-dev ~]# sudo service nginx restart
Redirecting to /bin/systemctl restart nginx.service
[root@nginx-dev ~]# systemctl status nginx
● nginx.service - nginx - high performance web serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)Active: active (running) since Sun 2023-08-06 18:07:52 CST; 23s agoDocs: http://nginx.org/en/docs/Process: 2482 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)Main PID: 2483 (nginx)CGroup: /system.slice/nginx.service├─2483 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf├─2484 nginx: worker process└─2485 nginx: worker processAug 06 18:07:52 nginx-dev systemd[1]: Starting nginx - high performance web server...
Aug 06 18:07:52 nginx-dev systemd[1]: Started nginx - high performance web server.

5. Nginx 配置文件

nginx 配置文件位于 /etc/nginx/nginx.conf :

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/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  /var/log/nginx/access.log  main;sendfile        on;keepalive_timeout  65;include /etc/nginx/conf.d/*.conf;
}

include 命令会引用 /etc/nginx/conf.d 目录下所有的.conf文件,这样可以保持主配置文件的简洁,同时配个多个.conf文件方便区分,增加可读性。

[root@nginx-dev conf.d]# cd /etc/nginx/conf.d
[root@nginx-dev conf.d]# ls
admin-8000.conf  default.conf

默认配置 /etc/nginx/conf.d/default.conf:

server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

① 该配置文件定义了一个监听本地 80 端口的服务器,服务器名为 localhost。location / 表示匹配所有以 / 开头的请求 URL,也就是所有请求。

② index 指定了默认的首页文件,当客户端请求一个目录时,Nginx 会尝试返回该目录下的默认文档,则会返回目录列表或者 403 Forbidden 错误。

index 指令的语法如下:

index file1 [file2 ...];

其中,file1、file2 等参数表示默认文档的文件名,多个文件名之间用空格分隔。Nginx 会按照指定的顺序依次尝试返回这些文件,直到找到一个存在的文件为止。

例如,以下配置指定了默认文档为 index.html:

location / {index index.html;
}

当客户端请求 / 目录时,Nginx 会尝试返回 index.html 文件。如果该文件不存在,则会返回目录列表或者 403 Forbidden 错误。

③ root 指令用于指定服务器上的根目录,即 Nginx 服务器将从该目录中提供文件:

[root@nginx-dev conf.d]# cd /usr/share/nginx/html
[root@nginx-dev html]# ll
total 8
-rw-r--r--. 1 root root 497 Apr 12 01:22 50x.html
-rw-r--r--. 1 root root 615 Apr 12 01:22 index.html

该服务器的根目录为 /usr/share/nginx/html,当访问该服务器时,如果请求的路径为 /,则返回 index.html 或 index.htm 文件。如果服务器出现 500、502、503 或 504 错误,则会返回 /usr/share/nginx/html/50x.html 页面。

④ 访问本机的80端口,将返回index.html文件:

[root@nginx-dev ~]# curl 127.0.0.1:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@nginx-dev ~]#

6. Nginx 配置文件结构

http {server{#虚拟主机location {listen 80;server_name localhost;}location {}}server{}}

参考课程文档地址:https://www.yuque.com/wukong-zorrm/cql6cz/ofesua

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

避免安装这5种软件,手机广告频繁弹窗且性能下降

在我们使用手机的日常生活中&#xff0c;选择合适的应用软件对于保持良好的使用体验至关重要。然而&#xff0c;有些软件可能会给我们带来不必要的麻烦和困扰。特别是那些频繁弹窗广告、导致手机性能下降的应用程序&#xff0c;我们应该尽量避免安装它们。 首先第一种&#xf…

Python-面向对象:面向对象、成员方法 、类和对象、构造方法、魔术方法、封装、继承、类型注解、多态(抽象类(接口))

版本说明 当前版本号[20230806]。 版本修改说明20230806初版 目录 文章目录 版本说明目录知识总览图面向对象初识对象生活中数据的组织程序中数据的组织使用对象组织数据 成员方法类的定义和使用成员变量和成员方法成员方法的定义语法注意事项 类和对象现实世界的事物和类使…

快速开发平台 WebBuilder 9 发布

WebBuilder 是一款强大&#xff0c;全面和高效的应用开发和运行平台。基于浏览器的集成开发环境&#xff0c;智能化的设计&#xff0c;能轻松完成常规桌面应用和面向手机等的移动应用开发。高效、稳定和可扩展的特点&#xff0c;适合复杂企业级应用的运行。跨平台、数据库和浏览…

ppt使用笔记

文章目录 如何让文档好看纯文字绝对不可行多用流程图和效果图切换动画母版音乐视频 作品渐变星空放大镜随机抽奖 其他快捷键 作为一个开发&#xff0c;对这种表现类型的软件一直不太上心&#xff0c;但有些场景要用到ppt&#xff0c;例如述职和项目案例分享。 很直观的体验就是…

Springboot实现简单JWT登录鉴权

登录为啥需要鉴权&#xff1f; 登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中&#xff0c;用户需要提供一定的身份信息&#xff08;例如用户名和密码&#xff09;进行登录&#xff0c;登录后系统会为用户生成一个身份令牌&#xff08;例如 JWT Token&am…

使用 Python 获取 CPU 数量

CPU 可以包含单核或多核。 单核只处理一个进程&#xff0c;而多核同时处理多个进程。 本篇文章将介绍使用 Python 程序查找 CPU 内核总数的不同方法。 使用 multiprocessing 模块获取 Python 中的 CPU 数量 multiprocessing 模块中的 cpu_count() 函数获取系统中的 CPU 总数。…

MyBatis@Param注解的用法

一、前言 本人在学习mybatis的过程中遇到的一个让人不爽的bug&#xff0c;在查找了些相关的资料后得以解决&#xff0c;遂记录。 二、报错及解决 mapper中有一方法&#xff1a; Select("select * from emp " "where name like concat(%, #{name}, %) "…

Python调用外部电商API的详细步骤

Python是一种高级编程语言&#xff0c;非常适合用于集成API&#xff0c;即应用程序编程接口。API通常是由网站和各种软件提供的接口&#xff0c;可以让不同的程序之间进行数据交换和通信。在Python中调用API&#xff0c;可以帮助我们轻松地获取数据&#xff0c;并将其整合到我们…

【Spring Cloud 四】Ribbon负载均衡

Ribbon负载均衡 系列文章目录背景一、什么是Ribbon二、为什么要有Ribbon三、使用Ribbon进行负载均衡服务提供者A代码pom文件yml配置文件启动类controller 服务提供者Bpom文件yml配置文件启动类controller 服务消费者pom文件yml文件启动类controller 运行测试 四、Ribbon的负载均…

0140 数据链路层2

目录 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 1.如果使用5类UTP来设计一个覆盖范围为200m的10BASE-T以太网&#xff0c;需要采用的设备是&#xff08;&#xff09; A.放大器 …

Selenium入门详细教程+实例演示

目录 1.Selenium概述 1.1什么是Selenium 1.2Selenium的优势 1.3Selenium WebDriver原理 2.Selenium环境搭建 3.Selenium 简单示例 4.八大元素定位 4.1定位方式 4.2定位方式的用法 5.Selenium API 5.1WebDriver 常用 API 5.2WebElement 常用 API 5.3代码示例 6.元素等待机…

阿里云瑶池 PolarDB 开源官网焕新升级上线

导读近日&#xff0c;阿里云开源云原生数据库 PolarDB 官方网站全新升级上线。作为 PolarDB 开源项目与开发者、生态伙伴、用户沟通的平台&#xff0c;将以开放、共享、促进交流为宗旨&#xff0c;打造开放多元的环境&#xff0c;以实现共享共赢的目标。 立即体验全新官网&…

【华秋推荐】物联网入门学习模块 ESP8266

随着全球信息技术的不断进步和普及&#xff0c;物联网成为当今备受关注的技术热点之一。通过物理和数字设备之间的连接来实现自动化和互联互通的网络。无线传感器、云计算和大数据分析等技术&#xff0c;物联网使设备能够相互交流和共享信息&#xff0c;实现智能化的自动化操作…

.Net6 Core Web API 配置 log4net + MySQL

目录 一、导入NuGet 包 二、添加配置文件 log4net.config 三、创建MySQL表格 四、Program全局配置 五、帮助类编写 六、效果展示 小编没有使用依赖注入的方式。 一、导入NuGet 包 ---- log4net 基础包 ---- Microsoft.Extensions.Logging.Log4Net…

K8s集群安全机制

1.访问K8s集群的时候&#xff0c;需要经过三个步骤完成具体操作 &#xff08;1&#xff09;认证&#xff08;2&#xff09;鉴权&#xff08;授权&#xff09;&#xff08;3&#xff09;准入控制 进行访问的时候&#xff0c;过程中都要经过apiserver&#xff0c;apiserver做统…

Android中的Webview 加载优化

Android中的Webview 加载优化 在Android中&#xff0c;WebView是用于在应用中展示网页内容的组件。由于网页内容可能包含大量的资源和复杂的页面结构&#xff0c;WebView的加载性能优化至关重要&#xff0c;以提高网页加载速度、节省流量和提升用户体验。以下是一些常用的WebV…

Docker与DevOps的无敌组合,引爆你的创新潜能

&#x1f3c6;荣誉认证&#xff1a;51CTO博客专家博主、TOP红人、明日之星&#xff1b;阿里云开发者社区专家博主、技术博主、星级博主。 &#x1f4bb;微信公众号&#xff1a;iOS开发上架 &#x1f4cc;本文由iOS开发上架原创&#xff01; &#x1f389;欢迎关注&#x1f50e;…

【网络编程·传输层】UDP和TCP的报头

目录 一、端口号划分 二、部分指令 1、pidof&#xff08;用于查看进程id&#xff09; 2、netstat&#xff08;查看网络状态&#xff09; 三、UDP协议 1、UDP协议格式 2、UDP协议如何进行封装、解包、分用 2.1封装、解包 2.2分用 3、UDP协议的特点 3.1UDP协议的特点 …

C# 控制台彩色深度打印 工具类

文章目录 前言Nuget 环境安装代码使用打印结果 总结 前言 有时候我们想要靠打印获得程序信息&#xff0c;因为Dubeg模式需要一点一点断点进入进出&#xff0c;但是我们觉得断点运行实在是太慢了&#xff0c;还是直接打印后找结果会好一点。 Nuget 环境安装 想自己写的话可以看…

Android Studio API 33 获取当前连接的WIFI名称

常规流程失败流程 常规流程 以下内容在 API 33 成功实现&#xff0c;低版本API还请自行尝试&#xff08;仅推荐 API 29 - 33 用户食用&#xff09; 先&#xff08;至少&#xff09;添加以下权限到你的 AndroidManifest.xml 文件 <uses-permission android:name"andr…