前言
正常服务器如果需要http服务,需要通过nginx进行服务设置,直接访问ip默认访问80端口,但指向哪里就需要通过nginx进行配置
安装nginx
-
更新系统软件包索引:在安装任何新软件之前,建议先更新系统的软件包索引:
sudo yum update
-
安装Nginx:使用yum包管理器来安装Nginx:
sudo yum install nginx
在执行此命令后,yum会从软件源下载Nginx软件包并安装它。
-
启动Nginx服务:安装完成后,您可以通过以下命令启动Nginx服务:
sudo systemctl start nginx
如果您希望在系统启动时自动启动Nginx服务,可以使用以下命令将其设置为开机自启动:
sudo systemctl enable nginx
-
检查Nginx状态:您可以使用以下命令检查Nginx服务的运行状态:
sudo systemctl status nginx
如果一切正常,您应该会看到Nginx服务正在运行。
-
配置防火墙:如果您的防火墙启用了,您需要确保允许HTTP流量通过。您可以使用以下命令开放HTTP端口(端口80):
sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --reload
- 这样就完成了Nginx的安装和基本配置。您现在可以通过浏览器访问您的服务器的IP地址(例如http://服务器的IP地址)来测试Nginx是否正常工作。
配置nginx.conf文件
设置server监听80端口,并指向index.html
- 编辑/etc/nginx/nginx.conf文件
vim /etc/nginx/nginx.conf
- 配置server设置
http {
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name example.com;
root /home/example-ht-vue/;
index index.html;
}
}
-
server { ... }
: 这是一个服务器块的开始标记,表示接下来的配置适用于特定的服务器块。 -
listen 80;
: 这指示Nginx监听HTTP请求的80端口。当来自80端口的HTTP请求到达服务器时,Nginx将使用此服务器块来处理这些请求。 -
server_name example.com;
: 这指定了当收到的HTTP请求中的"Host"标头与"example.com"匹配时,应该使用此服务器块来处理请求。换句话说,这个服务器块会处理来自"example.com"域名的HTTP请求。 -
root /home/example-ht-vue/;
: 这指定了Nginx在处理请求时应该使用的根目录。在这种情况下,所有来自"seascross.com"域名的请求都将在/home/example-ht-vue/
目录中寻找文件。 -
index index.html;
: 这定义了默认的索引文件。如果客户端请求的是一个目录而不是一个具体的文件,Nginx将尝试在目录中查找名为"index.html"的文件并返回它。
重启
systemctl restart nginx
测试访问
curl http://127.0.0.1/
遇到的坑
一、权限不足,无法访问
- 在通过curl http://127.0.0.1/访问,返回如下
[root@localhost ~]# curl http://127.0.0.1/
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
排查方法
- 查看log
cat /var/log/nginx/error.log
2024/05/13 14:56:01 [error] 20634#20634: *1 "/home/seascross-ht-vue/index.html" is forbidden (13: Permission denied), client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "127.0.0.1"
- 可以看出权限不足
解决方法
1. 用户修改为root
- 设置nginx.conf文件
vim /etc/nginx/nginx.conf
- 把nginx用户改成root用户
# user nginx;
user root;
- 重启nginx
service nginx restart
2. 文件夹设置权限
- 给index.html所在目录设置权限
chmod 777 -R /home/example
3. selinux没有关闭
- 这个是问题关键
SELinux(Security-Enhanced Linux)是一种Linux内核安全模块,提供了强大的访问控制机制,可以限制程序的行为,保护系统免受恶意软件和攻击的影响。getenforce命令用于查看当前SELinux的状态,它会告诉你SELinux是处于"Enforcing"(强制)模式还是"Permissive"(宽容)模式。在强制模式下,SELinux会强制执行策略,拒绝任何未经授权的操作。在宽容模式下,SELinux仍然会记录违规的操作,但不会阻止它们。
setenforce 0命令用于将SELinux设置为宽容模式,即使SELinux配置文件中指定了强制模式。这对于临时禁用SELinux或者在调试期间放宽安全策略时非常有用。但请注意,这不是永久性的禁用SELinux的方法,系统重新启动后,SELinux可能会重新回到其配置文件中指定的状态。
查看selinux状态:getenforce
设置selinux关闭:setenforce 0
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
外网无法访问
要使用Firewalld开放端口80(HTTP服务),您可以执行以下步骤:
-
检查HTTP服务是否在Firewalld中定义:在Firewalld中,服务通常与端口相关联。首先,检查HTTP服务是否已经定义。您可以使用以下命令来列出Firewalld中已定义的服务:
sudo firewall-cmd --list-services
如果您看到“http”服务在列表中,那么它已经被定义了。如果没有,请继续下一步。
-
添加HTTP服务到Firewalld:如果HTTP服务未在Firewalld中定义,您可以通过以下命令将其添加:
sudo firewall-cmd --add-service=http --permanent
这将添加HTTP服务,并将其持久化,确保在系统重启后仍然生效。如果您之前已经添加过HTTP服务,这个命令会忽略它。
-
添加端口到Firewalld:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
-
重新加载Firewalld配置:添加服务后,需要重新加载Firewalld配置使更改生效:
sudo firewall-cmd --reload
-
验证端口是否开放:您可以使用以下命令验证端口80是否已经开放:
sudo firewall-cmd --list-all
在输出中,您应该能够看到HTTP服务被添加到“public”区域,并且80端口处于开放状态。
这样设置后,您的Firewalld应该允许来自外部网络的HTTP流量通过端口80。