Ubuntu22.04下,nginx安装,配置https和反向代理

引言

  • 1 nginx安装
  • 2 nginx配置https
    • 2.1 使用openssl自生成证书
      • 1、查看openssl是否安装
      • 2、生成证书
    • 2.2 Nginx配置https(默认443端口)
  • 3 配置多tomcat反向代理
    • 基于端口的虚拟主机
  • 4 Nginx反向代理Gitlab(跨域)
  • 总结

1 nginx安装

# 创建nginx安装用户
sudo useradd -s /sbin/nologin www -M
#  系统更新
sudo apt update
# 通过以下命令安装编译器和调试器
sudo apt install build-essential
sudo apt-get install manpages-dev
gcc --version

# 安装依赖
sudo apt install openssl libssl-dev -y
sudo apt install libpcre3 libpcre3-dev -y
sudo apt install zlib1g-dev -y
sudo apt -y install make
# 下载nginx安装包
sudo wget https://nginx.org/download/nginx-1.22.1.tar.gz
# 解压缩
sudo tar -zxf nginx-1.22.1.tar.gz
cd /opt/nginx-1.22.1

sudo ./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_stub_status_module --with-http_ssl_module

sudo make
sudo make install

2 nginx配置https

想要给nginx配置https,可以使用自己生成的证书,这种证书是不安全的,多用于测试环境;正式环境使用从证书机构购买的证书。
此处使用的自己生成的证书做测试。

2.1 使用openssl自生成证书

此处使用openssl来生成证书,多用于测试

1、查看openssl是否安装

sudo openssl version -a

其中:OPENSSLDIR: "/usr/lib/ssl"为openssl的安装路径,配置文件中有一些默认设置,如果有特殊需要可进行修改:/usr/lib/ssl/openssl.cnf文件

2、生成证书

1、生成根证书的私钥(CA证书的RSA密钥,PEM格式)

sudo openssl genrsa -des3 -out server.key 2048

此处我设置为:123456
命令说明:
 - genrsa:产生rsa密钥命令
 - -out: 输出文件名 
 - 2048: 密钥的长度位数,默认为512

Ubuntu22.04下,nginx安装,配置https和反向代理_第1张图片
2、openssl调用此文件会经常要求输入密码,如果想去除此输密码的步骤,可以执行命令

sudo openssl rsa -in server.key -out server.key

则输入之前密码后可去除密码。

3、生成证书签署请求,(创建服务器证书的申请文件server.csr)

sudo openssl req -new -key server.key -out server.csr

没有去除密码的界面
Ubuntu22.04下,nginx安装,配置https和反向代理_第2张图片
去除密码的界面:
Ubuntu22.04下,nginx安装,配置https和反向代理_第3张图片

4、生成自签证书,即根证书CA(有效期为十年的),执行命令:生成ca.crt文件

sudo openssl req -new -x509 -key server.key -out ca.crt -days 3650

Ubuntu22.04下,nginx安装,配置https和反向代理_第4张图片
参照2输入所需信息。
命令说明:

  • -new:表示生成一个新证书签署请求
  • -x509:专用于CA生成自签证书,如果不是自签证书则不需要此项
  • -key:用到的私钥文件
  • -out:证书的保存路径
  • -days:证书的有效期限,单位是day(天),默认是openssl.cnf的default_days

5、创建服务器证书(有效期十年):

sudo openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

在这里插入图片描述

2.2 Nginx配置https(默认443端口)

1、把刚才生成的文件 server.key,server.crt 拷贝到Nginx安装路径的nginx/ssl下面
2、修改nginx.conf文件

cat conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen 443 ssl;
        server_name 192.168.216.180;

        #ssl证书的pem文件路径
        ssl_certificate  /usr/local/nginx/ssl/server.crt;
        #ssl证书的key文件路径
        ssl_certificate_key /usr/local/nginx/ssl/server.key;
        # ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;        
        # 配置指定了服务器应该支持的SSL/TLS协议版本。在这里,包括了TLS 1.0、TLS 1.1、TLS 1.2和TLS 1.3。这些协议用于在客户端和服务器之间建立安全连接。        
        # ssl_ciphers HIGH:!aNULL:!MD5;        
        # 这行配置定义了支持的密码套件用于加密。密码套件确定了在SSL/TLS握手期间使用的加密算法。在这里,HIGH表示使用一组强大的密码套件,!aNULL表示不允许无加密的身份验证,而!MD5表示不支持使用MD5算法的密码套件。这个配置确保仅使用没有已知漏洞的强大密码套件进行加密
        # ssl_prefer_server_ciphers on;
        # 用于指定服务器在选择密码套件时的偏好。这个选项的作用是告诉服务器在客户端和服务器之间进行SSL/TLS握手时,优先选择服务器端支持的密码套件,而不是客户端提供的密码套件列表。当设置为 ssl_prefer_server_ciphers on; 时,服务器会优先选择自己支持的密码套件,从而更好地控制加密过程,并确保使用的密码套件符合服务器的安全要求。
        location / {
                root   html;
                index  index.html index.htm;
        }
    }
    server {
        listen       80;
        server_name  localhost 192.168.216.180;
        rewrite ^(.*)$ https://$host$1 permanent;
    }
}

3、重启Nginx

sbin/nginx -s reload

3 配置多tomcat反向代理

基于端口的虚拟主机

cat conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       81;
        server_name  localhost;
        location / {
            proxy_pass http://192.168.92.100:8081/;
            proxy_set_header           Host $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size  100m;
            root   html;
            index  index.html index.htm;
        }
       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    
     server {
        listen       82;
        server_name  localhost;
        location / {
            proxy_pass http://192.168.92.100:8082/;
            proxy_set_header           Host $host;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size  100m;
            root   html;
            index  index.html index.htm;
        }
        
       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

# 重启nginx
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

4 Nginx反向代理Gitlab(跨域)

还是在nginx配置文件中配置

server {
        listen       81;
        server_name  localhost;

        location / {
            proxy_set_header  Host  $proxy_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;

            proxy_pass http://192.168.92.102:8088;
            #proxy_pass http://172.16.1.66:8088/users/sign_in;

        }
       
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
            proxy_pass http://172.16.1.66:8088;
            root  /opt/gitlab/embedded/service/gitlab-rails/public;
        }

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

在这里插入图片描述
在这里插入图片描述

总结

nginx配置反向代理时,不同网站的配置方法不一样,比如Jenkins这种本身就存在nginx代理的网页。所以我们在配置时,需要根据情况来配置不能一概而论。

你可能感兴趣的:(Ubuntu,nginx,https,运维,代理模式,jenkins,gitlab)