# 创建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
想要给nginx配置https,可以使用自己生成的证书,这种证书是不安全的,多用于测试环境;正式环境使用从证书机构购买的证书。
此处使用的自己生成的证书做测试。
此处使用openssl来生成证书,多用于测试
sudo openssl version -a
其中:OPENSSLDIR: "/usr/lib/ssl"为openssl的安装路径,配置文件中有一些默认设置,如果有特殊需要可进行修改:/usr/lib/ssl/openssl.cnf文件
1、生成根证书的私钥(CA证书的RSA密钥,PEM格式)
sudo openssl genrsa -des3 -out server.key 2048
此处我设置为:123456
命令说明:
- genrsa:产生rsa密钥命令
- -out: 输出文件名
- 2048: 密钥的长度位数,默认为512
2、openssl调用此文件会经常要求输入密码,如果想去除此输密码的步骤,可以执行命令
sudo openssl rsa -in server.key -out server.key
则输入之前密码后可去除密码。
3、生成证书签署请求,(创建服务器证书的申请文件server.csr)
sudo openssl req -new -key server.key -out server.csr
4、生成自签证书,即根证书CA(有效期为十年的),执行命令:生成ca.crt文件
sudo openssl req -new -x509 -key server.key -out ca.crt -days 3650
5、创建服务器证书(有效期十年):
sudo openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
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
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
还是在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代理的网页。所以我们在配置时,需要根据情况来配置不能一概而论。