目录
配置前提
NGINX在Linux中的安装
配置NGINX反向代理
配置中的常见错误
配置前提
NGINX在Linux中的安装
首先在官网下载最新稳定版本的Nginx-linux版本
官网链接🔗:
nginx: download
1、在ECS的CentOS7系统中的任意一处建立文件夹;
这里就以/usr/nginx/为例
mkdir /usr/nginx
2、将nginx-1.26.3.tar.gz文件放入此文件夹,然后解压
cd /usr/nginx
tar -zxf nginx-1.26.3.tar.gz
3、解压之后会有一个nginx-1.26.3/目录,开始配置nginx
cd nginx-1.26.3
./configure –prefix=/usr/local/nginx –with-http_ssl_module
make && make install
4、最后在/usr/local/下会生成一个nginx/目录,运行nginx
cd /usr/local/nginx/sbin/
./nginx
执行之后,查看进程:
ps aux | grep nginx
返回:
- 一个root运行的master主线程,由 root 用户启动的,负责管理和控制 worker 进程;
- 一个nobody的worker进程,由一个非特权用户(如 nobody)运行,负责处理实际的 HTTP 请求。
打开浏览器,输入你的ECS的ip,会出现nginx的主页:
就说明成功了,NGINX配置完毕!
随后,在nginx里配置SSL证书,配置反向代理的域名,使得可以在访问域名时使用HTTPS协议
1、将你的SSL证书相关文件放到/etc/pki/tls/certs/目录下,根据/etc/ssl/certs就能找到。(/etc/ssl/下的certs是一个链接)
2、在/usr/local/nginx/conf/目录下找到nginx的配置文件nginx.conf
vim /usr/local/nginx/conf/nginx.conf
此处建议将此文件夹下载到本地的Windows系统中进行编辑,用VSCode编辑,编辑完成后再上传到Linux主机中,并覆盖原文件。
配置NGINX反向代理
详细的配置流程和各参数作用,请参考腾讯云的官方配置文档,里面讲的比较详细:
腾讯云官方教程(NGINX版SSL证书的配置)🔗:
SSL 证书 Nginx 服务器 SSL 证书安装部署(Linux)
我们来看一下nginx.conf的文件结构:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# server {
# listen 80;
# server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# location / {
# root html;
# index index.html index.htm;
# }
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root html;
# }
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \\.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \\.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\\.ht {
# deny all;
#}
# }
# 主要是修改以下这些地方,上面的server应该全部注释掉
# another virtual host using mix of IP-, name-, and port-based configuration
# 此处server是重定向,强制http的访问使用https协议的
# 不是必要的,但是比较实用
server {
listen 80;
server_name xxxxx.com;
# 自动将 http 重定向到 https
return 301 https://$host$request_uri;
}
# 配置HTTPS协议,关键是配置好SSL文件
# HTTPS server
server {
listen 443 ssl;
server_name xxxxx.com;
ssl_certificate /etc/ssl/certs/xxxxx.com_bundle.pem;
ssl_certificate_key /etc/ssl/certs/xxxxx.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:HIGH:!aNULL:!MD5';
ssl_prefer_server_ciphers on;
# 此处是我的主机内运行的端口号进行的映射
location / {
proxy_pass http://localhost:8080; # Spring Boot
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 这里不配置 Flask 反向代理
# location /predict/ {
# proxy_pass http://localhost:5000;
# }
location /predict/ {
return 403;
}
location /static/ {
return 403;
}
}
# 此处可为ECS的公网IP配置HTTPS协议,不过不推荐
# 如果是域名申请的SSL证书,配置到IP会提示不受信任
# HTTPS localhost IP
server {
listen 443 ssl;
server_name 49.233.83.47;
ssl_certificate /etc/ssl/certs/xxxxx.com_bundle.pem;
ssl_certificate_key /etc/ssl/certs/xxxxx.com.key;
location / {
proxy_pass http://localhost:8081;
}
}
}
最后,在配置文件重新编译之后,保存到原本的位置;然后重启NGINX服务
cd /usr/local/nginx/sbin
./nginx -s reload
配置完毕且重启完毕后,打开浏览器访问域名,如果是国内的域名配置到国内的服务器,只能申请ICP备案后才能访问。
如果没有ICP备案,有一个简单的方法可以快速使用自己的域名,就是去买一个服务器在香港的内穿隧道,将自己的域名配置到公网IP的隧道上。
配置中的常见错误
错误一:参数请求错误
nginx 编译安装时最常见的错误之一,说明你现在用的 nginx 是源码编译的版本,但当初没有带上 –with-http_ssl_module 参数编译,所以它不支持 SSL / HTTPS
重新进入nginx的根目录再此安装
cd /usr/nginx/nginx-1.26.3
./configure –prefix=/usr/local/nginx –with-http_ssl_module
make && make install
错误二:NGINX命令无法找到
没有配置环境变量,这个命令只能使用路径来使用
/usr/local/nginx -v
可以去配置全局的环境变量
vim /etc/profile
在最后一行添加:
export PATH=$PATH:/usr/local/nginx/sbin
然后:wq!保存,并更新etc配置文件
source /etc/profile
之后便可以全局使用nginx命令了
错误三:ssl证书文件无法找到
我这里的问题是,在/usr/local/nginx/conf/目录下新建里一个service/目录,然后.pem和.key文件都放在里面,配置信息是填写的绝对路径。还是无法导入,设置了777权限都无法读取,使用
ls -l /usr/local/nginx/conf/server/xxxxx.pem
命令寻找返回没有此文件。
但是全局搜索命令又在此目录下找到了此文件
find / -name "xxxxx.pem"
最后,我发现无论把这个service目录放到哪里都没法找到ssl配置文件……😓
然后我发现,其实已经有一个存放初始.pem文件的目录了,/etc/ssl/certs,其中certs是一个链接,链接到/etc/pki/tls/certs/,里面是默认的几个文件,把他们删除,然后放上自己的相关配置SSL文件,然后运行
nginx -t
返回
成功了,这个存放nginx的SSL配置文件的问题,我看网上其他教程说是在哪里都行,我这个却不一样,可能是版本的问题,也可能是我操作的问题,希望有大佬在评论区可以指出这个问题是怎么回事。
错误四:端口占用
sudo netstat -tlnp | grep :80
sudo kill -9 2404 (你的进程号)
sudo netstat -tlnp | grep :80
再次查看,没有进程后,再启动nginx
./nginx
最后,欢迎大家留言讨论以及纠正文章中的错误🙂
评论前必须登录!
注册