在CentOS上搭建Nginx+HTTPS个人服务器
先说说为什么要搭https,就是因为小绿锁有点好看的(* ̄ω ̄)
- 环境:CentOS 6.9(腾讯云服务器,学生优惠版)
- 前期准备:腾讯实验室-使用CentOS搭建个人Wordpress博客
跟着上面的实验室一步步走,应该可以成功运行。具体步骤网上资料也很多,我就不再写了,这里重点写一写遇到的问题和解决方法。
一、Nginx启用HTTPS
- 首先腾讯云的域名可以申请为期一年的免费SSL证书,这里注意一点:申请的免费证书只能为申请时标注的域名(exapmle.com)生效,对其下的二级域名(else.example.com)不可用,需要再次申请,不过还是免费的。
- 证书审核通过之后,下载获得www.example.com.zip文件。
- 将解压后的文件发送到服务器端,保存在服务器上。
- 跟随安装指引
- 访问域名应该可以出现小绿锁了!
二、启用二级域名
为了区分功能模块,将前期准备时安装的wordpress与后续的其他网页分隔开,需要启用blog二级域名,将Nginx配置文件拆分成子文件,并分别配置。
在
/etc/nginx/conf.d
文件夹内新建配置文件wordpress.conf
并为二级域名进行配置,配置文件内容与一级域名的配置相似,主要修改server_name
和root
项server { listen 443;#监听443端口 server_name blog.example.cn; #填写绑定证书的域名 ssl on; ssl_certificate 1_blog.example.cn_bundle.crt; #证书文件 ssl_certificate_key 2_blog.example.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 ssl_prefer_server_ciphers on; root /your/path/to/wordpress; #wordpress安装路径 location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php index.php; } #添加对php文件的支持 location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; includefastcgi_params; } }
配置拆分之后,在
/etc/nginx/nginx.conf
就仅剩以下内容user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
重要的部分在于后面的
include
这里保证了我们在conf.d
文件夹中编写的配置最终会生效。为了保证全站HTTPS,我在
conf.d
文件夹内还将80端口转发单独列出来server { listen 80; server_name www.example.cn blog.example.cn; rewrite ^(.*)$ https://${server_name}$1 permanent; }
三、File not found 错误
使用php-fpm解析PHP,"No input file specified","File not found"是令nginx新手头疼的常见错误,原因是php-fpm
进程找不到SCRIPT_FILENAME
配置的要执行的.php文件,php-fpm
返回给nginx的默认404错误提示。
- 错误的路径被发送到php-fpm进程
出现这类错误,十个有九个是后端fastcgi
进程收到错误路径(SCRIPT_FILENAME
),而后端fastcgi
收到错误路径的原因大都是配置错误。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
这行配置文件尤其重要,大部分是因为这里配置出错导致的,正确配置之后可以恢复。
读取文件的权限不够
常见的有比如没有修改webapp文件夹的读取或执行权限
这里建议对nginx配置文件标注的root
文件夹极其子文件夹和文件,使用chmod
命令更改权限。必要时请升权。
chmod -R 755 /your/path/to/web/apps
- PHP-FPM进程监听的不是
127.0.0.1:9000
这里使用netstat命令查看端口占用情况。
netstat -atnlp | grep php-fpm
根据找到的结果,修改配置文件中的php转发配置即可。
fastcgi_pass 127.0.0.1:9000;
以上就是笔者配置Nginx时遇到的一些问题和解答方案。以后在自己的服务器上玩耍时遇到的问题还会继续记录。