安装并配置Nginx

1. 安装 Nginx

可以使用 apt 命令来安装 Nginx:

sudo apt install nginx

系统会询问你是否继续安装。输入 Y 并按 Enter 键继续。

2. 配置 Nginx

安装完成后,Nginx 的配置文件通常位于 /etc/nginx/ 目录下。主要的配置文件是 nginx.conf,但你也可能会修改其他位于 /etc/nginx/sites-available//etc/nginx/sites-enabled/ 目录下的文件。

使用文本编辑器(如 nano 或 vim)编辑配置文件。例如,要编辑默认站点配置文件,可以运行:

sudo nano /etc/nginx/sites-available/default

单页面修改配置

server {  
    listen 80;  
    server_name your_server_ip;  
  
    location / {  
        root /path/to/server/directory/dist; # 指向上传的dist目录  
        index index.html; # 默认访问的文件  
        try_files $uri $uri/ /index.html; # 对于单页应用,确保所有路由都返回index.html  
    }  
}

多页面修改配置

server {  
    listen 80;  
    server_name your_server_ip;  
  
	location /v1/ {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		alias /mnt/hdd1/jyh-fmk/dist/;  # 指向 v1 项目的构建输出目录
		try_files $uri $uri/ /index.html; # 如果请求的是文件或目录不存在,则返回 /index.html
	}

	location /v2/ {
		alias /mnt/hdd1/jyh-fmk/dist/v2/; # 指向 v2 项目的构建输出目录  
		try_files $uri $uri/ /v2/index.html; # 如果请求的是文件或目录不存在,则返回 /v2/index.html
	}

}

资源访问不到,需配置项目的publicPath

问题:当访问v2项目时,可能会出现css或者js资源访问不到的情况。

原因:这是因为当你打包应用时,所有的静态资源(如 JavaScriptCSS 和图片文件)通常会被放置在 dist 目录(或你配置的任何其他输出目录)下的一个固定路径中,默认情况下可能是 /assets/ 或类似的路径。这些资源的 URL 是由 Vue CLI 在构建过程中根据 publicPath 配置项来确定的。

在nginx配置中配置了root /mnt/hdd1/jyh-fmk/dist; ,则在v2项目中的静态资源会自动访问/mnt/hdd1/jyh-fmk/dist/assets

所以我们要修改webpack.config.js中的publicPath: '/v2/'或者vite.config.js中的base: VITE_APP_ENV === 'production' ? '/v2/' : '/'

3. 启动和停止 Nginx

使用以下命令来控制 Nginx 服务的状态:

# 启动 Nginx  
sudo systemctl start nginx  
  
# 停止 Nginx  
sudo systemctl stop nginx  
  
# 重启 Nginx  
sudo systemctl restart nginx  
  
# 查看 Nginx 状态  
sudo systemctl status nginx

4. 验证安装和配置

你可以通过访问服务器的 IP 地址或域名(如果配置了域名解析)来验证 Nginx 是否已经成功安装和配置。默认情况下,Nginx 会在 80 端口上监听 HTTP 请求。

如果你在服务器上本地访问,你可以使用 curl 命令或直接在浏览器中打开 http://localhost。

如果你是在远程访问,确保服务器的防火墙设置允许对 80 端口的访问,并使用服务器的公网 IP 地址或域名来访问。

5. Nginx 服务在尝试启动时遇到了问题

1. 查看 Nginx 服务状态:

使用 systemctl status nginx.service 命令来查看 Nginx 服务的状态以及任何相关的错误消息。

sudo systemctl status nginx.service

这个命令会输出服务的当前状态以及最近的日志条目。

2. 查看 Nginx 服务的日志:

使用 journalctl 命令来查看更详细的日志,这些日志通常包含了导致服务失败的具体原因。

sudo journalctl -xeu nginx.service

-x 选项会添加额外的解释性信息,-e 选项会显示最近的日志条目,-u 选项用于指定要查看的服务的单元名称(即 nginx.service)。

3. 检查 Nginx 配置文件:

Nginx 配置文件的问题经常是导致服务启动失败的原因。你需要检查 /etc/nginx/nginx.conf 文件以及 /etc/nginx/sites-available//etc/nginx/sites-enabled/ 目录下的任何配置文件。
你可以使用 nginx -t 命令来测试配置文件的语法是否正确:

sudo nginx -t

如果配置文件中有错误,这个命令会输出具体的错误位置。

6. Nginx端口被占用

1. 找出哪个进程正在使用80端口

你可以使用 netstat 或 ss 命令来找出哪个进程正在监听80端口。在大多数Linux系统上,你可以使用以下命令之一:

sudo netstat -tulnp | grep :80  
# 或者  
sudo ss -tulnp | grep :80

-t 表示TCP连接,-u 表示UDP连接,-l 表示监听状态,-n 表示以数字形式显示地址和端口号,-p 表示显示哪个进程正在使用它。

2. 停止正在使用80端口的进程:

如果找到占用80端口的进程,并且你确定可以安全地停止它(例如,如果它是一个你不再需要的web服务器或测试服务器),你可以使用 kill 命令或 systemctl(如果它是一个systemd服务)来停止它。
例如,如果它是一个名为 apache2 的服务,你可以使用:

sudo systemctl stop apache2

或者如果它是一个进程,你可以使用 kill 命令加上从 netstat 或 ss 命令得到的进程ID(PID)。

3. 重新尝试启动Nginx:

一旦你释放了80端口,你可以尝试重新启动Nginx服务:

sudo systemctl start nginx

并检查它是否成功启动:

sudo systemctl status nginx

4. 配置Nginx监听其他端口:

如果你不想停止正在使用80端口的进程,或者那个进程是你需要的,你可以考虑配置Nginx监听其他端口。这可以通过编辑Nginx的配置文件(通常是 /etc/nginx/nginx.conf/etc/nginx/sites-available/ 下的某个文件)来完成。
在配置文件中,找到 listen 指令,并将其更改为其他未使用的端口号,例如8080:

server {  
    listen 8080;  
    # ... 其他配置 ...  
}

然后重新加载或重启Nginx以使更改生效:

sudo systemctl reload nginx  # 重新加载配置  
# 或者  
sudo systemctl restart nginx # 重启Nginx服务

注意:如果你更改了Nginx监听的端口,你也需要确保你的防火墙设置允许新的端口,并且你的客户端知道应该连接到哪个端口。

7. Nginx配置接口转发

在Nginx中配置转发通常意味着将客户端的请求转发到后端服务器(如应用服务器、API服务器等)上。这通常通过Nginx的proxy_pass指令来实现。

	location ^~ /jyh {
	    # 将/jyh请求转发到后端服务器  
        proxy_pass http://backend_server; # 后端服务器的地址,可以是IP地址或域名 
        # 设置转发时应该传递的HTTP请求头  
        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;  
	}

注:如果后端配置白名单导致接口请求不到,可以通过配置请求头中的Origin设置为白名单里的地址。

8. Nginx配置负载均衡

配置Nginx以实现负载均衡,旨在将客户端的请求有效地分发到多个后端服务器上,从而提高系统的性能和可用性。

http {  
    # 定义后端服务器组  
    upstream backend_servers {  
        server backend1.example.com; # 后端服务器1  
        server backend2.example.com; # 后端服务器2  
        # 可以根据需要添加更多服务器  
  
        # 可以选择性地设置权重、失败重试次数等参数  
        # server backend3.example.com weight=2;  
        # server backend4.example.com down; # 暂时不参与负载均衡  
        # server backend5.example.com backup; # 备用服务器  
    }  
  
    server {  
        listen 80; # 监听端口  
        server_name yourdomain.com; # 你的域名  
  
        location / {  
            # 将请求转发到后端服务器组  
            proxy_pass http://backend_servers;  
  
            # 设置转发时应该传递的HTTP请求头  
            proxy_set_header Host $host;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  
            # 其他Nginx配置...  
        }  
  
        # 其他location块...  
    }  
  
    # 其他http配置...  
}

1.选择负载均衡算法

Nginx提供了多种负载均衡算法,你可以根据实际需求进行选择:

  • 轮询(Round Robin):默认的负载均衡算法,按顺序将请求分发到每个后端服务器。
  • IP哈希(IP Hash):根据客户端的IP地址将请求分发到后端服务器,确保相同IP的客户端每次访问都会被发送到同一台后端服务器。
  • 最小连接数(Least Connections):将请求发送到当前连接数最少的后端服务器。

upstream块中,你可以通过添加ip_hashleast_conn指令来选择非默认的负载均衡算法。

9. 使用Docker实现nginx部署

1:安装DockerDocker Compose

可以通过以下命令来安装Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -oP 'tag_name": "\K(.*)(?=")')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2:创建项目目录和文件

1.创建一个新的项目目录,例如 nginx-docker-compose

mkdir nginx-docker-compose
cd nginx-docker-compose

2.在项目目录中创建一个名为 docker-compose.yml 的文件。

3:编写 docker-compose.yml 文件

docker-compose.yml 文件中,定义Nginx服务。以下是一个基本的示例配置:

version: '3.8'
services:
  nginx:
    image: nginx:latest
    container_name: my_nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./logs:/var/log/nginx

在这个配置中:

  • version 指定了Docker Compose文件的格式版本。
  • services 下的 nginx 定义了一个Nginx服务。
  • image 指定了使用官方的Nginx镜像。
  • container_name 为容器指定了一个名称。
  • ports 将容器内的80端口映射到宿主机的8080端口。
  • volumes 用于将宿主机的目录映射到容器内的目录,以便你可以轻松地访问和修改Nginx的配置文件、HTML文件和日志文件。

4:创建必要的目录和文件

1.创建 html 目录,用于存放你的网页文件

mkdir html
echo "<html><body><h1>Hello, Nginx with Docker Compose!</h1></body></html>" > html/index.html

2.创建 nginx.conf 文件,用于自定义Nginx的配置(可选)。如果你不需要自定义配置,可以省略这一步,因为Nginx有一个默认的配置文件。
3.创建 logs 目录,用于存放Nginx的日志文件(可选)。

5:运行Docker Compose

docker-compose up -d

这里的 -d 参数表示以守护进程模式运行容器。

6 修改nginx配置

vim /mydata/base/nginx/conf.d/research.conf

7 重启nginx 服务

docker-compose restart nginx

10. nginx配置 SSL 证书 (自签名证书)

问题:网页通过 HTTPS 安全加载,但前端代码却尝试向一个不安全的 HTTP 接口发送请求。现代浏览器出于安全考虑,默认会阻止这种 混合内容(Mixed Content) 请求。

解决方式:nginx配置 SSL 证书

1. 生成自签名证书(如果没有)

sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/nginx/ssl/selfsigned.key \
    -out /etc/nginx/ssl/selfsigned.crt

按提示填写信息,Common Name 可以填 124.223.71.235。

2. 修改 Nginx 配置

编辑 /etc/nginx/nginx.conf,在 http {} 块内添加或修改 server 配置:

HTTPS 服务器配置

server {
    listen 443 ssl;
    server_name 124.223.71.235;  # 你的IP

    # SSL 证书路径
    ssl_certificate /etc/nginx/ssl/selfsigned.crt;
    ssl_certificate_key /etc/nginx/ssl/selfsigned.key;

    # SSL 优化参数
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 代理你的后端服务(假设是 8087 端口)
    location /api/ {
        proxy_pass http://124.223.71.235:8087/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 静态文件或默认路由(可选)
    root /usr/share/nginx/html;
    index index.html;

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
}

3. 重启 Nginx

sudo nginx -t   # 测试配置语法
sudo systemctl restart nginx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值