配置环境
#有的vps需要解决php源乱码的问题
sudo apt-get install -y language-pack-en-base
vi /etc/profile
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
source /etc/profile
#解决php源乱码的问题 ending
#安装add-apt-repository
apt-get install software-properties-common
#安装nodejs源
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
#新版本Ubuntu16.04默认支持openssl 1.0.2h
add-apt-repository ppa:nginx/stable
#老版本Ubuntu 14.04建议使用 PPA for NGINX with HTTP/2 on Ubuntu 12.04 LTS and higher,使用下面的源可以同时升级openssl,可以开启http2
#https://launchpad.net/~ondrej/+archive/ubuntu/nginx/
add-apt-repository ppa:ondrej/nginx
#下面安装php7 mysql5.7源
add-apt-repository ppa:ondrej/php
add-apt-repository ppa:ondrej/mysql-5.7
apt-get update
apt-get install nodejs openssl nginx mysql-server php7.3 php7.3-gd php7.3-mbstring php7.3-xml php7.3-zip php7.3-curl php7.3-fpm php7.3-mysql php7.3-bcmath php7.3-dev
#查看openssl版本
openssl version
nginx.conf配置
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 2m;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml;
gzip_vary on;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
默认服务器,ip返回403配置
server_tokens off;
proxy_hide_header X-Powered-By;
server {
listen 80 default_server;
server_name _;
return 403;
}
server {
listen 443 ssl http2 default_server;
server_name _;
ssl on;
ssl_certificate /etc/letsencrypt/live/xxx/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx/privkey.pem;
return 403;
}
fastcgi_params限制PHP脚本执行目录
#PHP Prohibit cross-Hosting
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/";
纯静态配置
server {
listen 80;
server_name xxxx;
root /home/nginx/xxxx;
index index.html index.htm index.php;
location ~ .*\.(gif|jpg|jpeg|png|bmp)$
{
expires 30d;
}
location ~ .*\.(woff|ttf|svg)$
{
expires 180d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location /
{
try_files $uri $uri/ =404;
}
}
PHP一般通用配置
server {
listen 80;
server_name xxxx;
index index.php index.html index.htm;
root /home/nginx/xxx;
location ~ .*\.(gif|jpg|jpeg|png|bmp)$
{
expires 30d;
}
location ~ .*\.(woff|ttf|svg)$
{
expires 180d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ \.php($|/)
{
try_files $uri = 404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
开启fix_pathinfo(一般默认已开启)
#确认php.ini中的如下配置,其实默认已经为1,当框架出现问题时可以来检查一下
cgi.fix_pathinfo = 1
PHP通用框架配置
server {
listen 80;
server_name xxxx;
index index.html index.htm index.php;
root /home/nginx/xxxx;
location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|webp)$
{
expires 30d;
}
location ~ .*\.(woff|ttf|svg|otf|eot)$
{
expires 180d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ^~ /.svn
{
deny all;
}
location ^~ /.git
{
deny all;
}
location /
{
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}
location ~ \.php($|/)
{
fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
SSL+HTTP2的PHP框架配置
server {
listen 443 ssl http2;
server_name xxx;
index index.html index.htm index.php;
root /home/nginx/xxx;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
ssl_session_tickets on;
ssl_certificate /etc/letsencrypt/live/xxx/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx/privkey.pem;
location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|webp)$
{
expires 30d;
}
location ~ .*\.(woff|ttf|svg|otf|eot)$
{
expires 180d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ^~ /.svn
{
deny all;
}
location ^~ /.git
{
deny all;
}
location /
{
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}
location ~ \.php($|/)
{
fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}