CentOS云服务器部署http/https服务

CentOS云服务器

如果你的服务器是基于 CentOS 操作系统,你可以按照以下步骤在 CentOS 上安装 Git:

  1. 更新系统包:首先,使用下面的命令更新系统包列表:

    sudo yum update
    
  2. 安装 Git:运行以下命令安装 Git:

    sudo yum install git
    
  3. 验证安装:完成安装后,使用以下命令验证 Git 是否已成功安装并显示版本信息:

    git --version
    

    如果输出显示了 Git 的版本信息,则表示 Git 安装成功。

安装完成后,你就可以在 CentOS 上使用 git 命令来克隆代码和执行其他 Git 相关操作了。

关于yarn

在 CentOS 上安装 Yarn 时需要添加 Yarn 仓库的原因是,Yarn 不包含在 CentOS 的默认软件仓库中。因此,为了能够通过包管理工具 yum 安装 Yarn,我们需要将 Yarn 仓库添加到系统中。

通过添加 Yarn 仓库,我们可以获取 Yarn 的最新版本,并确保在 CentOS 系统上能够正常安装和更新 Yarn。Yarn 仓库通常包含了 Yarn 软件包的元数据和相关信息,使我们能够方便地使用 yum 命令来安装和管理 Yarn。

在执行添加 Yarn 仓库的命令时,我们使用 curl 命令从 Yarn 的官方仓库获取 GPG 密钥并将 Yarn 仓库的配置文件添加到 /etc/yum.repos.d/ 目录下。这样,我们就可以使用 yum 命令来安装 Yarn,并获得 Yarn 的最新版本和更新。

要解决这个问题,可以按照以下步骤来安装 Yarn:

  1. 添加 Yarn 仓库: 首先,将 Yarn 的仓库添加到系统中。使用以下命令导入 GPG 密钥和添加 Yarn 仓库:

    curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
    
  2. 安装 Yarn: 运行以下命令安装 Yarn:

    sudo yum install yarn
    
  3. 验证安装: 安装完成后,使用以下命令验证 Yarn 是否已成功安装并显示版本信息:

    yarn --version
    

    如果输出显示了 Yarn 的版本信息,则表示 Yarn 安装成功。

关于CentOS http

如果你在 CentOS 上部署了 Nest.js 应用程序,并且无法通过 HTTPS 访问该应用程序,则可能存在以下问题:

  1. 未安装或配置 SSL 证书:HTTPS 需要使用 SSL 证书来建立安全连接。如果你的应用程序未安装或配置 SSL 证书,则可能会导致 HTTPS 访问失败。

解决方法:确保你的 Nest.js 应用程序已经安装和配置了有效的 SSL 证书。你可以从证书颁发机构(CA)获得 SSL 证书,也可以使用自签名证书来测试。为了在 Nest.js 中启用 HTTPS,你需要在应用程序的启动选项中设置 httpsOptions。你可以参考 Nest.js 官方文档以获取有关如何启用 HTTPS 的更多信息。

  1. 防火墙限制 HTTPS 访问:防火墙可能会阻止从 Internet 上的非常规端口接收传入连接。如果你的应用程序监听的端口不是标准 HTTPS 端口 443,则防火墙可能会阻止来自该端口的传入连接。

解决方法:检查服务器的防火墙规则,并确保允许从 HTTPS 端口接收传入连接。如果你是使用 CentOS 8 或更高版本,则默认防火墙是 firewalld。你可以使用 firewall-cmd 命令来添加规则以允许 HTTPS 访问:

sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

以上是可能导致 Nest.js 应用程序无法通过 HTTPS 访问的两个常见原因和解决方案。如果问题仍然存在,请查看服务器或应用程序的日志文件以获取更多信息,以进行故障排除。

如果你在 CentOS 上运行 sudo firewall-cmd --add-service=https --permanent 命令时收到错误消息 “FirewallD is not running”,这意味着防火墙服务 FirewallD 并未处于运行状态。在这种情况下,你可以尝试以下解决方法:

  1. 启动 FirewallD 服务:首先,确保 FirewallD 服务已经安装并可用。你可以使用以下命令来检查 FirewallD 服务的状态:

    systemctl status firewalld
    

    如果状态显示为 “inactive”(未激活)或 “dead”(停止),则说明 FirewallD 服务未处于运行状态。

    解决方法:启动 FirewallD 服务并设置其在系统启动时自动启动。请使用以下命令:

    systemctl start firewalld
    sudo systemctl enable firewalld
    
  2. 使用替代防火墙:如果 FirewallD 无法正常工作,你可以考虑使用替代的防火墙解决方案,如 iptables。在 CentOS 上,默认情况下也可以使用 iptables 作为防火墙。你可以使用以下命令添加允许 HTTPS 访问的规则:

    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    sudo service iptables save
    

    这些命令将添加一个允许来自端口 443 的传入连接的规则,并保存规则以确保在系统重启后仍然生效。

关于部署

一般http会走80端口,https走443或者8080端口,一般系统会占用,所以需要nginx配置

是的,如果80端口被占用,你可以使用 Nginx 作为代理服务器,将请求转发到其他可用的端口。下面是在 CentOS 中修改 Nginx 代理的步骤:

  1. 安装 Nginx:

    在 CentOS 上安装 Nginx 可以使用以下命令:

    sudo yum install nginx
    
  2. 配置 Nginx 代理:

    打开 Nginx 的配置文件进行编辑:

    sudo vi /etc/nginx/nginx.conf
    
  3. 修改 Nginx 配置文件:

    http 部分下的 server 块中添加以下内容,将请求转发到其他端口(假设转发到 8080 端口):

    server {
        listen 80;
        server_name example.com;  // 将 example.com 替换为你的域名或 IP 地址
    
        location / {
            proxy_pass http://localhost:8080;  // 将 localhost:8080 替换为你要转发的目标地址
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

    注意,将 example.com 替换为你的域名或 IP 地址,并将 http://localhost:8080 替换为你要转发的实际目标地址。

  4. 保存并退出配置文件。

  5. 测试配置是否正确:

    运行以下命令检查 Nginx 配置是否有语法错误:

    sudo nginx -t
    

    如果输出显示配置文件语法正确,则继续下一步。如果存在错误,请检查并修复配置文件。

  6. 重启 Nginx:

    使用以下命令重启 Nginx 服务,以使配置更改生效:

    sudo systemctl restart nginx
    

现在,Nginx 将会代理接收到的所有 HTTP 请求,并将其转发到指定的目标地址(例如,8080端口)。这样,即使80端口被占用,你仍然可以使用 Nginx 来将请求转发到可用的端口上。

关于nginx

默认配置:

    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;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;


关于nginx配置

    location / {
        proxy_pass http://localhost:8080;  // 将 localhost:8080 替换为你要转发的目标地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    } 

$host$remote_addr 是 Nginx 的变量,用于获取请求的相关信息。

  • $host:表示客户端发起请求的主机名。在代理模式下,$host 变量会被设置为用户请求的主机名,然后将该主机名传递给指定的目标地址。例如,如果用户请求的 URL 是 http://example.com,那么 $host 将会被设置为 example.com
  • $remote_addr:表示客户端的 IP 地址。$remote_addr 变量用于将客户端的真实 IP 地址传递给代理服务器,以便目标服务器能够获取到客户端的真实 IP 地址。这对于一些应用程序来说非常重要,因为它们可能需要特定的 IP 地址来进行访问控制或其他操作。

在上述配置中,proxy_set_header 指令用于设置 HTTP 请求头的值。proxy_set_header Host $host; 将设置请求的 Host 头字段为当前请求的主机名,确保转发到的目标服务器能够正确处理该请求。proxy_set_header X-Real-IP $remote_addr; 则将设置请求的 X-Real-IP 头字段为客户端的真实 IP 地址。

通过使用这些变量,Nginx 可以将请求的相关信息传递给代理服务器,从而实现请求的转发和目标服务器的正确处理。

关于防火墙

一般而言,部署了后端服务之后,直接可以通过ip+端口号访问了,但是需要事先配置防火墙,允许暴露端口!

应用要跑在0.0.0.0上,不能是localhost!

关于localhost 和 0.0.0.0

​ 0.0.0.0有几个不同的含义,不过当告诉服务器监听了0.0.0.0, 意味着监听每一个可用的网络接口,从服务器进程的角度来看,IP 地址为127.0.0.1 的环回适配器看起来就像机器上的任何其他网络适配器一样,因此被告知监听0.0.0.0的服务器也将接受该接口上的连接。
​ 因此在实际应用中,一般我们在服务端绑定端口的时候可以选择绑定到0.0.0.0, 这样我的服务访问就可以通过主机的多个ip地址访问我的服务。

关于启动https

首先写个重定向的nginx

这段代码是一个 Nginx 的配置段,用于将 HTTP 请求重定向到 HTTPS。

具体来说,它实现了以下功能:

  • listen 80;:监听 80 端口,即 HTTP 的默认端口。
  • server_name your-domain.com;:指定服务器的域名为 your-domain.com。你需要将其替换为你自己的域名。
  • location /:匹配所有请求的根路径。
  • return 301 https://$host$request_uri;:对于匹配的请求,返回一个 301 永久重定向到 https://$host$request_uri

这段配置告诉 Nginx 当收到 HTTP 请求时,无论请求的路径是什么,都会将请求重定向到相同的主机和路径,但使用 HTTPS 协议。这样就实现了将 HTTP 请求重定向到 HTTPS 的功能,以确保安全传输和加密连接。

请注意,要使此重定向生效,你还需要在服务器上配置 SSL 证书以启用 HTTPS。

安装和配置 Nginx:

  • 如果你还没有安装 Nginx,可以使用以下命令安装:

    sudo yum install nginx
    
  • 安装完成后,进入 Nginx 配置文件夹:

    cd /etc/nginx/conf.d/
    
  • 创建一个新的配置文件(例如

    example.conf
    

    并编辑它:

    sudo nano example.conf
    
  • 在配置文件中添加以下内容,将 HTTPS 请求重定向到 本机http服务:

    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name www.paulgung.online;
    
        ssl_certificate "/etc/pki/nginx/server.crt";
        ssl_certificate_key "/etc/pki/nginx/private/server.key";
    
        location / {
            proxy_pass http://localhost:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    • your-domain.com 替换为你的域名。

关于终端复用

是的,tmux 是一个终端复用工具,可以帮助你在后台运行命令或会话,并在需要时重新连接到这些会话。下面是使用 tmux 在后台运行命令的具体做法:

  1. 安装 tmux:首先,确保你的服务器上已经安装了 tmux。使用适合你的操作系统的包管理工具进行安装。例如,在 Ubuntu 上可以使用如下命令安装:

    sudo yum -y install tmux //Centos或RHEL
    sudo apt-get -y install tmux //ubuntu
    
  2. 启动新会话:通过运行以下命令启动一个新的 tmux 会话:

    tmux new-session -s session_name
    

    这将创建一个名为 “session_name” 的新会话。你可以替换 “session_name” 为你自定义的会话名称。

  3. 在会话中运行命令:现在,你可以在 tmux 会话中像在普通终端中一样运行你的 Nest 服务命令。例如:

    npm run start
    

    使用此命令来启动你的 Nest 服务。在 tmux 会话中,你的命令将在后台运行。

  4. 分离会话:当你的命令在后台运行时,你可以使用以下快捷键分离会话:

    按下 Ctrl + B,然后按下 D 键

    这将使 tmux 会话在后台运行,你可以关闭终端窗口而不会中断该会话。

  5. 连接到会话:如果你想重新连接到之前创建的 tmux 会话,可以使用以下命令:

    tmux attach-session -t session_name
    

    将 “session_name” 替换为你之前创建会话的名称。

通过以上步骤,你可以使用 tmux 在后台运行你的命令或会话,并在需要时重新连接到这些会话。这样即使你关闭了终端窗口或断开 SSH 连接,你的 Nest 服务仍将继续运行。

如果再次需要进入已分离的 tmux 会话,可以使用以下命令:

tmux attach

或者使用以下命令检查当前所有的会话:

tmux ls

然后选择你想要进入的会话,并使用其会话编号或名称连接到该会话,例如:

tmux attach-session -t <会话编号或名称>

我的配置

在/etc/nginx/nginx.conf里

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

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;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    # 引入了https的配置
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        
        location / {
            proxy_pass http://localhost:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
    server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  _;
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/pki/nginx/server2.crt";
        ssl_certificate_key "/etc/pki/nginx/private/server2.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

在/etc/nginx/conf.d/下新建了myapp.conf

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name paulgung.online;

    ssl_certificate "/etc/pki/nginx/server2.crt";
    ssl_certificate_key "/etc/pki/nginx/private/server2.key";

    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

关于证书

在 CentOS 系统中,NGINX 的默认配置文件路径是 /etc/nginx,并且证书和私钥文件通常被放置在 /etc/pki/nginx 目录下。

具体而言,私钥文件应该位于 /etc/pki/nginx/private 目录中,以 .key 结尾。而证书文件应该位于 /etc/pki/nginx/certs 目录中,一般以 .crt.pem 结尾。

你可以使用以下命令查看 NGINX 配置文件的位置:

sudo nginx -t

该命令会输出 NGINX 的主配置文件路径,通常为 /etc/nginx/nginx.conf。在该配置文件中,你可以找到其他配置文件的引入路径。

关于证书和私钥文件的具体位置,你可以在 NGINX 配置文件中寻找 ssl_certificatessl_certificate_key 指令。默认情况下,这些指令指向 /etc/pki/nginx 目录下的相应子目录:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/pki/nginx/certs/example.com.crt;
    ssl_certificate_key /etc/pki/nginx/private/example.com.key;

    # 其他配置项...
}

所以,在 CentOS 系统中,通常将 NGINX 的证书和私钥文件放置在 /etc/pki/nginx/certs/etc/pki/nginx/private 目录中。但请注意,具体路径可能因你的配置而有所不同,你可以根据 NGINX 配置文件中的指令来确定正确的路径。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值