Facebook Google+


Tutorial Servidor Ubuntu 16.04 Basic
#1
En esta guía configuraremos un servidor con las siguientes características: Ubuntu 16.04 + Nginx + MariaDB + Google PageSpeed + GeoIP + LetsEncrypt + Memcached + PHP7 + PhpMyAdmin  + GIT + Composer + Dominio + Subdominio + Certificado SSL2 con renovación automática + HTTP2 + Wordpress.
   
Cita:Si ya dispones de VPS o quieres crear un servidor en localhost no es necesario que sigas las anteriores guías, aunque tendrás que adaptar a tu servidor algunos de los apartados que se ven en esta. En los siguientes puntos damos por hecho que ya estás conectado a tu instancia EC2 en AWS tal y como se explica en el punto 2.
 
Para la configuración de este servidor utilizaré el usuario josantonius, el host SSH aws.amazon.com, la dirección IP 52.15.130.205 y el dominio example.tk. Estos se remarcarán en rojo en la guía y tendréis que cambiarlos por los vuestros.  
     
[5.1] INSTALAR NGINX, GEOIP Y GOOGLE PAGESPEED
  
Escribe en tu terminal:
 
    cd /usr/local/src

    sudo wget http://nginx.org/keys/nginx_signing.key

    sudo apt-key add nginx_signing.key

    sudo nano /etc/apt/sources.list.d/nginx.list

        Añadir:

        deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
        deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

        Guardar con Control + O y salir con Control + X.

    sudo apt-get build-dep nginx

        Do you want to continue? [Y/n] Y

    sudo apt-get source nginx

    find . -name 'nginx-*' -type d 
 

        Salida: "./nginx-1.11.5" | Si no coincide cambia la versión abajo.

    NGINX_FOLDER='nginx-1.11.5'

    sudo mkdir ${NGINX_FOLDER}/debian/modules

    cd ${NGINX_FOLDER}/debian/modules

    sudo wget https://github.com/FRiCKLE/ngx_cache_pur...2.3.tar.gz

    sudo tar -zxvf 2.3.tar.gz

    sudo rm 2.3.tar.gz

    sudo wget https://github.com/pagespeed/ngx_pagespe...eta.tar.gz

    sudo tar -zxvf v1.11.33.2-beta.tar.gz

    sudo rm v1.11.33.2-beta.tar.gz

    cd ngx_pagespeed-1.11.33.2-beta/

    sudo wget https://dl.google.com/dl/page-speed/psol...3.2.tar.gz

    sudo tar -zxvf 1.11.33.2.tar.gz

    sudo rm 1.11.33.2.tar.gz

    sudo wget https://github.com/openresty/headers-mor....30.tar.gz

    sudo tar -zxvf v0.30.tar.gz

    sudo rm v0.30.tar.gz

    cd /usr/local/src/${NGINX_FOLDER}/debian

    sudo rm rules

    sudo touch rules && sudo nano rules

        Contenido del archivo:
   
Código:
#!/usr/bin/make -f

#export DH_VERBOSE=1
export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-pie
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

PKGS = nginx nginx-dbg

BUILDDIR_nginx = $(CURDIR)/debian/build-nginx
BUILDDIR_nginx_debug = $(CURDIR)/debian/build-nginx-debug
INSTALLDIR = $(CURDIR)/debian/nginx
BASEDIR = $(CURDIR)

ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
    ifeq (${NUMJOBS}, 0)
        NUMJOBS = 1
    endif
else
    NUMJOBS = 1
endif

DO_PKGS = $(PKGS)

config.env.%:
    dh_testdir
    mkdir -p $(BUILDDIR_$*)
    cp -Pa $(CURDIR)/auto $(BUILDDIR_$*)/
    cp -Pa $(CURDIR)/conf $(BUILDDIR_$*)/
    cp -Pa $(CURDIR)/configure $(BUILDDIR_$*)/
    cp -Pa $(CURDIR)/contrib $(BUILDDIR_$*)/
    cp -Pa $(CURDIR)/man $(BUILDDIR_$*)/
    cp -Pa $(CURDIR)/src $(BUILDDIR_$*)/
    touch $@

config.status.nginx: config.env.nginx
    cd $(BUILDDIR_nginx) && \
    CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_geoip_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --add-module="$(CURDIR)/debian/modules/ngx_cache_purge-2.3" --add-module="$(CURDIR)/debian/modules/ngx_pagespeed-1.11.33.2-beta" --add-module="$(CURDIR)/debian/modules/ngx_pagespeed-1.11.33.2-beta/headers-more-nginx-module-0.30"
    touch $@

config.status.nginx_debug: config.env.nginx_debug
    cd $(BUILDDIR_nginx_debug) && \
    CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --with-debug
    touch $@

build-arch.%: config.status.%
    dh_testdir
    dh_prep
    $(MAKE) -j$(NUMJOBS) -C $(BUILDDIR_$*) build

build-arch: build-arch.nginx build-arch.nginx_debug
    dh_testdir
    touch $@

build-dbg.%: install
    dh_testdir
    dh_strip --dbg-package=nginx-dbg

build-dbg: build-dbg.nginx
    dh_testdir
    touch $@

build-indep:
    dh_testdir
    touch $@

build: build-arch build-indep
    dh_testdir
    touch $@

clean:
    dh_testdir
    dh_testroot
    dh_clean
    rm -f $(CURDIR)/objs
    rm -rf $(CURDIR)/debian/build-*
    rm -f $(CURDIR)/debian/*.init
    find $(CURDIR) -maxdepth 1 -size 0 -delete

post-build:
    mv $(BUILDDIR_nginx_debug)/objs/nginx $(BUILDDIR_nginx_debug)/objs/nginx-debug
    ln -s $(BUILDDIR_nginx)/objs $(CURDIR)/objs
    cp $(BUILDDIR_nginx)/objs/nginx.8 $(BUILDDIR_nginx)/objs/nginx-debug.8

install:
    dh_testdir
    dh_testroot
    dh_prep
    dh_installdirs
    dh_install
    mkdir -p $(INSTALLDIR)/usr/lib/nginx/modules
    mkdir -p $(INSTALLDIR)/usr/share/doc/nginx
    install -m 644 debian/CHANGES $(INSTALLDIR)/usr/share/doc/nginx/changelog
    install -m 644 debian/nginx.vh.default.conf $(INSTALLDIR)/etc/nginx/conf.d/default.conf
    ln -s /usr/lib/nginx/modules $(INSTALLDIR)/etc/nginx/modules

binary-indep: build post-build install
    dh_testdir
    dh_testroot
    dh_installman -i -pnginx
    dh_installdebconf
    sed -e 's/%%PROVIDES%%/nginx/g' \
        -e 's/%%DEFAULTSTART%%/2 3 4 5/g' \
        -e 's/%%DEFAULTSTOP%%/0 1 6/g' \
        < debian/nginx.init.in > debian/nginx.init
    dh_installinit -i -pnginx --no-restart-on-upgrade --no-start --name=nginx
    sed -e 's/%%PROVIDES%%/nginx-debug/g' \
        -e 's/%%DEFAULTSTART%%//g' \
        -e 's/%%DEFAULTSTOP%%/0 1 2 3 4 5 6/g' \
        < debian/nginx.init.in > debian/nginx-debug.init
    dh_installinit -i -pnginx --no-restart-on-upgrade --no-start --noscripts --name=nginx-debug
    dh_installlogrotate -i -pnginx --name=nginx

binary-arch: install build-dbg
    dh_testdir
    dh_testroot
    dh_installchangelogs -a
    dh_installdocs -a
    dh_lintian -a
    dh_link -aA
    dh_compress -a
    dh_perl -a
    dh_fixperms -a
    dh_installdeb -a
    dh_shlibdeps -a
    dh_gencontrol -a
    dh_md5sums -a
    dh_builddeb $(foreach p,$(DO_PKGS),-p$(p))

binary: binary-indep binary-arch

.PHONY: build clean binary-indep binary-arch binary install
   
    
    Guardar con Control + O y salir con Control + X.

    sudo nano changelog

        Buscar: nginx 1.11.5-1~xenial xenial; urgency=low

        Cambiar por: nginx 1.11.5-1~xenial-pagespeed xenial; urgency=low

        Guardar con Control + O y salir con Control + X.

    cd /usr/local/src/${NGINX_FOLDER}

    sudo dpkg-buildpackage -uc -b

    cd ..

    sudo dpkg --install nginx_*~xenial*_amd64.deb

    sudo apt-mark hold nginx

    sudo mkdir -p /var/ngx_pagespeed_cache

    sudo chown -R www-data:www-data /var/ngx_pagespeed_cache

    cd /etc/init.d
   

    sudo wget https://raw.githubusercontent.com/JasonG...ster/nginx
   
[5.2] CONFIGURACIÓN PARA NGINX, GEOIP Y GOOGLE PAGESPEED
Escribe en tu terminal:

    sudo chmod +x nginx
   

    sudo update-rc.d nginx defaults

    sudo rm /etc/nginx/nginx.conf && sudo touch /etc/nginx/nginx.conf

    sudo nano /etc/nginx/nginx.conf

        Contenido del archivo:
    
Código:
user www-data;

# Ajustar los worker_processes según el número de cores
# No cambiar si utilizas una instancia gratuita de AWS
worker_processes 1;

pid /run/nginx.pid;

events {
        # Obtenemos el valor máximo de worker_connections con ulimit -n
        # No cambiar si utilizas una instancia gratuita de AWS
        worker_connections 1024;
}

http {

        ##
        # Basic Settings
        ##
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        types_hash_max_size 2048;

        ##
        # GeoIP Settings
        ##
        geoip_country /etc/nginx/geoip/GeoIP.dat; # the country IP database
        geoip_city /etc/nginx/geoip/GeoLiteCity.dat; # the city IP database

        map $geoip_country_code $allowed_country {

            # Permitir acceso a todos los países excepto a algunos.
            # Esta configuración permitiría el acceso a todos los países
            # excepto a Colombia, España y México
            # default yes; 
            # CO no;
            # ES no;
            # MX no;

            # Bloquear acceso a todos los países excepto a algunos
            # Esta configuración bloquearía el acceso a todos los países
            # excepto a Colombia, España y México
            # default no;
            # CO yes;
            # ES yes;
            # MX yes;
        }

        # Evitamos que muestre la versión de Nginx al cliente
        server_tokens off;

        # Cambiar Servername (Puedes ponerle el nombre que quieras)
        more_set_headers "Servername";

        # Ajuste de los buffers:

        client_body_buffer_size 10K;
        client_header_buffer_size 1k;
        client_max_body_size 8m;
        large_client_header_buffers 2 1k;

        # Ajuste de los timeouts:

        client_body_timeout 12;
        client_header_timeout 12;
        keepalive_timeout 15;
        send_timeout 10;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        # Evitando Ataques CSS XSS

        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";

        ##
        # Logging Settings
        ##
        
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        # Desactivamos el logging de los accesos al servidor:

        access_log off;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 2;
        gzip_min_length 1000;
        gzip_proxied expired no-cache no-store private auth;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css text/xml application/json application/x-javascript application/xml application/xml+rss text/javascript;

        ##
        # nginx-naxsi config
        ##
        # Uncomment it if you installed nginx-naxsi
        ##

        #include /etc/nginx/naxsi_core.rules;

        ##
        # nginx-passenger config
        ##
        # Uncomment it if you installed nginx-passenger
        ##

        #passenger_root /usr;
        #passenger_ruby /usr/bin/ruby;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

        ##
        # PageSpeed Settings
        ##

        pagespeed on;

        # Needs to exist and be writable by nginx.  Use tmpfs for best performance.
        pagespeed FileCachePath /var/ngx_pagespeed_cache;

        # let's speed up PageSpeed by storing it in the super duper fast memcached
        #pagespeed MemcachedThreads 1;
        #pagespeed MemcachedServers "localhost:11211";

        # show half the users an optimized site, half the regular site
        #pagespeed RunExperiment on;
        #pagespeed AnalyticsID UA-XXXXXXXXXX-1;
        #pagespeed ExperimentVariable 1;
        #pagespeed ExperimentSpec "id=1;percent=50;level=CoreFilters;enabled=collapse_whitespace,remove_comments;";
        #pagesp     eed ExperimentSpec "id=2;percent=50";

        # Filter settings
        pagespeed RewriteLevel CoreFilters;
        pagespeed EnableFilters collapse_whitespace,remove_comments;
        
        # Remove “X-Page-Speed” version from headers
        pagespeed XHeaderValue "Powered by Google";

        # HTTPS Support
        # pagespeed FetchHttps enable;

        # PageSpeed Filters
        # CSS Minification
        # pagespeed EnableFilters combine_css,rewrite_css;

        # JS Minification
        # pagespeed EnableFilters combine_javascript,rewrite_javascript;

        # Images Optimization
        #pagespeed EnableFilters lazyload_images;
        #pagespeed EnableFilters rewrite_images;
        #pagespeed EnableFilters convert_jpeg_to_progressive,convert_png_to_jpeg,convert_jpeg_to_webp,convert_to_webp_lossless;
        
}

#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;
#       }
#}
  
    
    Guardar con Control + O y salir con Control + X.

    sudo nano /etc/apt/preferences.d/nginx

        Contenido archivo:
         

        Package: nginx Pin:
        version 1.11.5-1ubuntu3
        Pin-Priority: 1001

        Guardar con Control + O y salir con Control + X.
 
[5.3] CONFIGURACIÓN PARA LOCALHOST
 
Escribe en tu terminal:

    sudo mkdir -p /etc/nginx/sites-enabled

    sudo mkdir -p /etc/nginx/sites-available

Se elimina el contenido para asegurar una sola configuración por defecto:


    sudo rm /etc/nginx/conf.d/default.conf 

    sudo touch /etc/nginx/sites-available/localhost

    sudo ln -s /etc/nginx/sites-available/localhost /etc/nginx/sites-enabled/localhost

Definir la configuración por defecto en /etc/nginx/sites-available/localhost:


    sudo mkdir -p /var/www/localhost/public_html                        

    sudo chown josantonius:www-data /var/www -R         

    sudo nano /etc/nginx/sites-available/localhost

        Contenido del archivo:
   
Código:
server {

   listen 80 default_server;

   listen [::]:80 default_server ipv6only=on;

   # Configuracion en el caso de que queramos servir solamente accesos HTTPS
   # Hay que comentar las lineas listen 80;   listen [::]:80;
   # y descomentar el bloque server del final del archivo.
  
   #listen 443 ssl http2;
   #listen [::]:443 ssl http2 ipv6only=on;

   # Restringir acceso por ip y redireccionar al dominio

   #add_header X-Frame-Options "SAMEORIGIN";

   #return 301 http://example.tk$request_uri;

  # Carpeta raiz de este servidor :

   root /var/www/localhost/public_html;

   # Permitir acceso solo a nuestra IP

   #allow   YOUR-IP-ADDRESS;
   #deny    all;

   # Ficheros indice por defecto para las carpetas

   index index.php index.html index.htm index.nginx-debian.html;

   # Desactivacion de publicacion de version de PHP utilizada

   fastcgi_hide_header 'X-Powered-By';

   server_name _;

   charset UTF-8;

   location / {
      # First attempt to serve request as file, then
      # as directory, then fall back to displaying a 404.
      try_files $uri $uri/ =404;
   }

   # ··· Error pages ··· #

   # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
   #location /RequestDenied {
   #       proxy_pass http://127.0.0.1:8080;
   #}

   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   /usr/share/nginx/html;
   }

   # ··· PHP-FPM - PHP-CGI - HHVM ··· #
  
   location ~ \.(hh|php)$ {
      # First attempt to serve request as file, then
      # as directory, then fall back to displaying a 404.
      try_files $uri =404;

      fastcgi_split_path_info ^(.+\.php)(/.+)$;

      # * * With php7-cgi ** #
      # NOTE: Change listen = /run/php/php7.0-fpm.sock
      #       to listen = 127.0.0.1:9000
      #       in /etc/php/7.0/fpm/pool.d/www.conf
      #fastcgi_pass 127.0.0.1:9000;

      # * * With php7-fpm ** #
      fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;

      # * * With HHVM ** #
      #error_page 502 = @fallback;
      #fastcgi_keep_conn on;
      #fastcgi_pass 127.0.0.1:9000;
      #fastcgi_param   SERVER_NAME $host;

      # Configuraciones globales
      fastcgi_intercept_errors on;
      fastcgi_buffer_size 128k;
      fastcgi_buffers 256 4k;
      fastcgi_busy_buffers_size 256k;
      fastcgi_temp_file_write_size 256k;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
   }

   # ··· Fallback ··· #
                  
   #location @fallback {
   #   # First attempt to serve request as file, then
   #   # as directory, then fall back to displaying a 404.
   #   try_files $uri =404;
   #
   #   fastcgi_split_path_info ^(.+\.php)(/.+)$;
   #
   #   # With php7-cgi alone:
   #   # NOTE: Change listen = /run/php/php7.0-fpm.sock
   #   #       to listen = 127.0.0.1:9000
   #   #       in /etc/php/7.0/fpm/pool.d/www.conf
   #   # ATENCIÓN: No utilizar php7-cgi por defecto o cargará antes PHP que HHVM
   #   #fastcgi_pass 127.0.0.1:9000;
   #
   #   # With php7-fpm:
   #   fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;
   #
   #   # Configuraciones globales
   #   fastcgi_intercept_errors on;
   #   fastcgi_buffer_size 128k;
   #   fastcgi_buffers 256 4k;
   #   fastcgi_busy_buffers_size 256k;
   #   fastcgi_temp_file_write_size 256k;
   #   fastcgi_index index.php;
   #   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   #   include fastcgi_params;
   #}
  
   # ··· Phpmyadmin ··· #
    
   #location /pma {
   #
   #   # PROTECCIÓN CON CONTRASEÑA
   #   auth_basic "Acceso Admin";
   #   auth_basic_user_file /etc/nginx/pma_pass;
   #
   #}

   # Denegacion de acceso a robots.txt

   location = /robots.txt {
      access_log off; log_not_found off;
   }

  # Denegacion de acceso a archivos .htaccess
  
   location ~ /\.ht {
      deny all;
   }

   # Modificacion realizada para que Letscrypt pueda validar el dominio
  
   location ~ /.well-known {
      allow all;
   }  

   location ~* \.(js|css|png|jpg|jpeg|gif|ico|eot|otf|ttf|woff)$ {
      add_header Access-Control-Allow-Origin *;
      access_log off; log_not_found off; expires 30d;
   }
  
   ##
   # Configuracion del certificado SSL de letsencrypt
   ##
  
   #ssl_certificate /etc/letsencrypt/live/www.example.tk/fullchain.pem;
   #ssl_certificate_key /etc/letsencrypt/live/www.example.tk/privkey.pem;

   #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  
   # Cipher Suites disponibles:
   #ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384smilie19HE-RSA-AES128-GCM-SHA256smilie19HE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHAsmilie19HE-RSA-AES128-SHA256smilie19HE-RSA-AES128-SHAsmilie19HE-DSS-AES128-SHA256smilie19HE-RSA-AES256-SHA256smilie19HE-DSS-AES256-SHAsmilie19HE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIAsmilie19ES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

   #ssl_prefer_server_ciphers on;

   # Uso de grupo Diffie-Hellman
  
   #ssl_dhparam /etc/ssl/certs/dhparam.pem;

   #ssl_session_timeout 1h;
   #ssl_session_cache shared:SSL:5m;  
   #ssl_stapling on;
   #ssl_stapling_verify on;
   #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;        

   ##
   # PageSpeed Settings
   # Ensure requests for pagespeed optimized resources go to the pagespeed handler
   # and no extraneous headers get set.
   ##

   location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
      add_header "" "";
   }

   location ~ "^/pagespeed_static/" { }
   location ~ "^/ngx_pagespeed_beacon$" { }
   location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
   location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
   location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
   location /pagespeed_console { allow 127.0.0.1; deny all; }    
      
   # Prohibir acceso a determinados países y redireccionar en el caso 
   # de que se hayan especificado en el archivo /etc/nginx/nginx.conf

   if ($allowed_country = no) {
      return 444;
   }
}

# Creamos un nuevo servidor que escuchará en el puerto 80 y redireccionará todas las peticiones a HTTPS
  
#server {
#   listen 80;
#   server_name example.tk www.example.tk;
#   return 301 https://$host$request_uri;
#}
  
    
    Control + O y salir con Control + X
 
    sudo nginx -t

        Respuesta:
        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/nginx.conf test is successful

    sudo systemctl restart nginx

    sudo cp -r /usr/share/nginx/html/* /var/www/localhost/public_html

    sudo nano /var/www/localhost/public_html/index.html

        Buscar: <h1>Welcome to nginx</h1>

        Cambiar por:  <h1>Welcome to nginx · localhost</h1>

Ya puedes acceder a tu sitio desde: http://52.15.130.205/
  

[Imagen: 1476747576_pFZ41xodlTDZQW6.png]  

Verificamos que PageSpeed esté correctamente instalado:

    curl -I localhost

        Salida: X-Page-Speed: Powered by Google
  
[5.4] INSTALAR PHP 7 · PHP-FPM
  
Escribe en tu terminal:
 

     sudo apt-get install python-software-properties

        Do you want to continue? [Y/n] Y

    sudo add-apt-repository ppa:ondrej/php

        Press [ENTER] to continue or ctrl-c to cancel adding it ENTER

    update

    sudo apt-get install -y php7.0 php7.0-fpm
 

Antes de continuar vamos a comprobar que PHP se haya instalado correctamente.

 
     sudo echo "<h1>LOCAL</h1><?php phpinfo();" > /var/www/localhost/public_html/index.php

    sudo service php7.0-fpm restart

Acceder al sitio: http://52.15.130.205/
 
[Imagen: 1476748932_ZgM73qmTH4WsFr3.png]
  
[5.5] INSTALAR MÓDULOS PARA PHP 7 (Opcional)
    
Escribe en tu terminal:
 

     sudo apt-get -y install php7.0-mysql php7.0-json php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext php-apcu php-mbstring
 
[5.6] UTILIZAR PHP-CGI EN VEZ DE PHP-FPM (Opcional)
 
Cita:Si tienes pensado seguir con la siguiente guía e instalar HHVM en tu servidor, sáltate este paso.

Escribe en tu terminal:
 

    sudo nano /etc/php/7.0/fpm/php.ini

        Buscar: ;cgi.fix_pathinfo=1

        Cambiar por: cgi.fix_pathinfo=0

        Control + O y salir con Control + X

Utilizar php7.0-fpm service en puerto específico como servicio:


    sudo nano /etc/php/7.0/fpm/pool.d/www.conf
   

        Buscar: listen = /run/php/php7.0-fpm.sock

        Cambiar por: 

            ;listen = /run/php/php7.0-fpm.sock
            listen = 127.0.0.1:9000

        Control + O y salir con Control + X

    sudo nano /etc/nginx/sites-available/localhost

        Dentro de:
  
Código PHP:
location ~ \.(hh|php)$ {...} 

        Buscar y comentar:


            fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;

        Buscar y descomentar:
  

            #fastcgi_pass 127.0.0.1:9000;
 

        Guardar con Control + O y salir con Control + X
 
[5.7] CONFIGURACIÓN PARA GEOIP
 
Escribe en tu terminal:
 

    sudo nano /etc/nginx/fastcgi_params

        Añadir al final del archivo:
  
Código:
### SET GEOIP Variables ###
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;

fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;
  
        ​Guardar con Control + O y salir con Control + X
 

    sudo systemctl reload nginx.service
 
Tests:


    sudo nano /var/www/example.tk/public_html/php_geoip_test.php
 
        Contenido del archivo:
  
Código PHP:
<?php

/*
 * También podríamos utilizar $_SERVER['GEOIP_COUNTRY_CODE']; en vez
 * de getenv(GEOIP_COUNTRY_CODE) e igual con el resto.
 */

echo 'country_code: '        getenv(GEOIP_COUNTRY_CODE)        . '
'
;
echo 
'country_code3: '       getenv(GEOIP_CITY_COUNTRY_CODE3)  . '
'
;
echo 
'country_name: '        getenv(GEOIP_COUNTRY_NAME)        . '
'
;
echo 
'city_country_code: '   getenv(GEOIP_CITY_COUNTRY_CODE)   . '
'
;
echo 
'city_country_code3: '  getenv(GEOIP_CITY_COUNTRY_CODE3)  . '<br>';
echo 
'city_country_name: '   getenv(GEOIP_CITY_COUNTRY_NAME)   . '<br>';
echo 
'region: '              getenv(GEOIP_REGION)              . '<br>';
echo 
'city: '                getenv(GEOIP_CITY)                . '<br>';
echo 
'postal_code: '         getenv(GEOIP_POSTAL_CODE)         . '<br>';
echo 
'city_continent_code: ' getenv(GEOIP_CITY_CONTINENT_CODE) . '<br>';
echo 
'latitude: '            getenv(GEOIP_LATITUDE)            . '<br>';
echo 
'longitude: '           getenv(GEOIP_LONGITUDE)           . '<br>'
  
        ​Guardar con Control + O y salir con Control + X
 
Acceder la página: http://52.15.130.205/php_geoip_test.php
  

[Imagen: 1476825298_nwQHCjidoMw8s8c.png]   

  
        ​Guardar con Control + O y salir con Control + X
 

Opcional: Con GeoIP también podemos prohibir o permitir acceso a determinados países:

  
    sudo nano /etc/nginx/nginx.conf
 
        ​Busca map $geoip_country_code $allowed_country {} y descomenta el párrafo con la configuración que mejor se adapte a lo que necesitas.   Puedes modificar la ruta para la redirección dentro de if ($allowed_country = no) en el archivo de configuración de tu sitio, que hasta este punto sería: /etc/nginx/sites-available/localhost. No te olvides de reiniciar Nginx cuando lo hagas.  
 
[5.8] INSTALAR MEMCACHED 
 
Escribe en tu terminal:
 

    sudo apt-get -y install memcached
  
Verificar:
Código:
sudo netstat -tap | grep memcached
    
    sudo systemctl restart php7.0-fpm.service
          
        Debería aparecer algo así:

            tcp  0  0 localhost.localdo:11211 *:*  LISTEN  8266/memcached

    sudo apt-get -y install php-memcached

    sudo nano /etc/nginx/nginx.conf

        Buscar y descomentar:

            #pagespeed MemcachedThreads 1;
            #pagespeed MemcachedServers "localhost:11211";

        ​Guardar con Control + O y salir con Control + X

    sudo systemctl restart nginx

    sudo systemctl restart memcached

Stats:

   
Código:
echo "stats settings" | nc localhost 11211
  
Tests:


    sudo nano /var/www/localhost/public_html/php_cache_test.php

        Contenido del archivo:

Código PHP:
<?php
$mem 
= new Memcached();
$mem->addServer("127.0.0.1"11211);

$result $mem->get("php");

if (
$result) {
    echo 
$result;
} else {
    echo 
"No hay clave coincidente. Voy a agregarla ahora";
    
$mem->set("php""La clave se encuentra en Memcached :)") or die("No se pudo guardar nada en Memcached...");

  
        ​Guardar con Control + O y salir con Control + X

Acceder al sitio: http://52.15.130.205/php_cache_test.php


        ​Salida: No hay clave coincidente. Voy a agregarla ahora

Recargar la página: http://52.15.130.205/php_cache_test.php

        ​Salida: La clave se encuentra en Memcached Smile
  
[5.9] INSTALAR MARIADB
 
Escribe en tu terminal:
 

    sudo apt-get install software-properties-common
   

    sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
   

    sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main'

    update

    sudo apt-get install mariadb-client mariadb-server

        
Do you want to continue? [Y/n] Y

        New password for the MariaDB "root" user: dbpassword

        Repeat password for the MariaDB "root" user: dbpassword

    sudo mysql_secure_installation

    
    Change the root password? [Y/n] n
        Remove anonymous users? [Y/n] Y
        Disallow root login remotely? [Y/n] Y
        Remove test database and access to it? [Y/n] Y
        Reload privilege tables now? [Y/n] Y
 

    sudo update-rc.d mysql defaults
  
[5.10] CREAR USUARIO Y BASE DE DATOS EN MARIADB
   
Escribe en tu terminal:
 

    mysql -u root -p

    
    Salida: Welcome to the MariaDB monitor.

        create database DatabaseName;

            
Salida: Query OK, 1 row affected (0.00 sec)

        create user databaseUser@localhost identified by 'databaseUserPassword';

            
Salida: Query OK, 0 rows affected (0.00 sec)

        grant all privileges on databaseName.* to databaseUser@localhost identified by 'databaseUserPassword';

            Salida: Query OK, 0 rows affected (0.00 sec)

        flush privileges;

    
        Salida: Query OK, 0 rows affected (0.00 sec)

        \q
  
[5.11] INSTALAR PHPMYADMIN
  
Escribe en tu terminal:
 

    update

    sudo apt-get install phpmyadmin

        Do you want to continue? [Y/n] Y
      

        NO MARCAR NI Apache NI lighthttpd. Pulsar TAB y OK 

        Configure database for phpmyadmin with dbconfig-common? Yes

        MySQL application password for phpmyadmin: pmapassword
        
        Password confirmation:  pmapassword

    sudo nano /etc/phpmyadmin/config-db.php
      

        Buscar:

            $dbport='';

        Sustituir por:

            $dbport = '3306';
 
[5.12] CONFIGURACIÓN PARA EXAMPLE.TK
   
Cita:Si solo vas a acceder a tu servidor a través de la IP puedes saltar hasta el punto 5.22 de esta guía. 
    
Escribe en tu terminal:


    mkdir -p /var/www/example.tk/public_html 

    sudo chown josantonius:www-data /var/www -R

    sudo cp /etc/nginx/sites-available/localhost /etc/nginx/sites-available/example.tk

    sudo nano /etc/nginx/sites-available/example.tk

        Buscar :

            listen 80 default_server;
            listen [::]:80 default_server ipv6only=on;

        Sustituir por:

            listen 80;
            listen [::]:80;

        Buscar :

            root /var/www/localhost/public_html;

        Sustituir por:

            root /var/www/example.tk/public_html;

        Buscar :

            server_name _;

        Sustituir por:

            server_name www.example.tk example.tk;

        Guardar con Control + O y salir con Control + X

    sudo ln -s /etc/nginx/sites-available/example.tk /etc/nginx/sites-enabled/example.tk

    sudo echo "<h1>EXAMPLE.TK</h1><?php phpinfo(); ?>" > /var/www/example.tk/public_html/index.php


    sudo service nginx restart

Acceder al dominio: http://example.tk/
   
[Imagen: 1476831836_RtWYbzQq0Mwnjsa.png]
  
[5.13] REDIRECCIONAR ACCESOS POR IP AL DOMINIO
     
Escribe en tu terminal:
 

    sudo nano /etc/nginx/sites-available/localhost


    Buscar y descomentar:

        #add_header X-Frame-Options "SAMEORIGIN";

        #return 301 http://example.tk$request_uri;

Acceder al sitio: http://52.15.130.205/
   
[5.13] INSTALAR GIT Y COMPOSER
    
Escribe en tu terminal:
 

    sudo su

    update

    apt-get install git 

Código:
sudo curl -sS https://getcomposer.org/installer | sudo php
 
    sudo mv composer.phar /usr/local/bin/composer
  
[5.14] INSTALAR LETSENCRYPT
  
Escribe en tu terminal:
 

    sudo su

    update

    apt-get install bc

    git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

    service nginx reload
 
[5.15] INSTALAR CERTIFICADO SSL PARA EXAMPLE.TK
   
Escribe en tu terminal:

    cd /opt/letsencrypt

    sudo ./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/example.tk/public_html -d www.example.tk -d example.tk --email tuemail@mail.com --agree-tos

Si todo ha ido bien deberías ver un mensaje como este:
  
[Imagen: 1476838413_Eyq9Q5gU4ezVpPE.png]
   
[5.16] INCREMENTAR LA SEGURIDAD DEL CERTIFICADO SSL
   
Incrementar la seguridad implementando grupo Diffie-Hellman.

 Escribe en tu terminal:

    sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
   
[5.17] CONFIGURACIÓN SSL PARA EXAMPLE.TK
   
Escribe en tu terminal:
 

    sudo nano /etc/nginx/sites-available/example.tk

        Buscar y comentar:

            listen 80;
            listen [::]:80;
   

        Buscar y descomentar:

            #listen 443 ssl http2;
            #listen [::]:443 ssl http2 ipv6only=on;
      

        Buscar y descomentar:
  
Código:
#ssl_certificate /etc/letsencrypt/live/www.example.tk/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/live/www.example.tk/privkey.pem;

#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

#ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384smilie19HE-RSA-AES128-GCM-SHA256smilie19HE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHAsmilie19HE-RSA-AES128-SHA256smilie19HE-RSA-AES128-SHAsmilie19HE-DSS-AES128-SHA256smilie19HE-RSA-AES256-SHA256smilie19HE-DSS-AES256-SHAsmilie19HE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIAsmilie19ES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

#ssl_prefer_server_ciphers on;

#ssl_dhparam /etc/ssl/certs/dhparam.pem;

#ssl_session_timeout 1h;
#ssl_session_cache shared:SSL:5m;  
#ssl_stapling on;
#ssl_stapling_verify on;
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
 
Creamos un nuevo servidor que redireccionará todas las peticiones HTTP a HTTPS:


    Buscar y descomentar:
     

            #server {
            #   listen 80;
            #   server_name example.tk www.example.tk;
            #   return 301 https://$host$request_uri;
            #}

        Guardar con Control + O y salir con Control + X

    sudo service nginx restart

    sudo service php7.0-fpm restart

Acceder al sitio: https://example.tk/

Comprobar validez del ssl: https://www.ssllabs.com/ssltest/
  
[Imagen: 1476841297_M7HjZX7MfPiptaN.png]
        
Guardar con Control + O y salir con Control + X
 
[5.18] RENOVACIÓN AUTOMÁTICA DEL CERTIFICADO SSL
   
Los certificados para Let's Encrypt solo son válidos para 90 días así que crearemos una tarea cron para renovar el certificado cada lunes a las 04:30 y recargar Nginx.

Para renovar el certificado habría que ejecutar:


    /opt/letsencrypt/letsencrypt-auto renew

Mostrará una respuesta parecida a esta:
 

        -------------------------------------------------------------------------------
        Processing /etc/letsencrypt/renewal/www.example.tk.conf
        -------------------------------------------------------------------------------
        Cert not yet due for renewal

        The following certs are not due for renewal yet:
        /etc/letsencrypt/live/www.example.tk/fullchain.pem (skipped)
        No renewals were attempted.
 
Añadir cron:
    

    sudo su

    crontab -e
   

        Añadir líneas:

            # Renovación automática del certificado SSL
            30 4 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
            35 4 * * 1 /etc/init.d/nginx reload

Guardar con Control + O y salir con Control + X

    sudo nano /etc/nginx/nginx.conf

        Buscar y descomentar:

            # HTTPS Support
            # pagespeed FetchHttps enable;

Guardar con 
Control + O y salir con 
Control + X
 
Para actualizar el cliente de Let's Encrypt utilizaríamos:
 
    cd /opt/letsencrypt

    git pull

    sudo su josantonius
 

Cita:Ahora crearemos un subdominio que utilizaremos para conectaremos a las áreas de administración del sitio, por ejemplo, será el lugar desde el que accederemos a PhpMyAdmin. Para mayor seguridad bloquearemos el acceso a este servidor (subdominio) para todo el mundo excepto para nuestra IP o las IPs que añadamos en la configuración. También cambiaremos su ruta de acceso para PhpMyAdmin y protegeremos el directorio con contraseña.

Este subdominio lo deberías haber añadido anteriormente en la guía: Crear dominio gratuito para instancia en AWS. Si no vas a co
 
[5.19] CONFIGURACIÓN PARA SERVER.EXAMPLE.TK
 
Escribe en tu terminal:

    mkdir -p /var/www/server.example.tk/public_html 

    sudo chown josantonius:www-data /var/www -R

    sudo cp /etc/nginx/sites-available/localhost /etc/nginx/sites-available/server.example.tk

    sudo nano /etc/nginx/sites-available/server.example.tk

        Buscar :

            listen 80 default_server;
            listen [::]:80 default_server ipv6only=on;

        Sustituir por:

            listen 80;
            listen [::]:80;

        Buscar :

            root /var/www/localhost/public_html;

        Sustituir por:

            root /var/www/server.example.tk/public_html;

        Buscar :

            server_name _;

        Sustituir por:

            server_name server.example.tk;

        Guardar con Control + O y salir con Control + X

    sudo ln -s /etc/nginx/sites-available/server.example.tk /etc/nginx/sites-enabled/server.example.tk

    sudo echo "<h1>SERVER.EXAMPLE.TK</h1><?php phpinfo(); ?>" > /var/www/server.example.tk/public_html/index.php


    sudo service nginx restart

Acceder al subdominio: http://server.example.tk/
 
[5.13] INSTALAR CERTIFICADO SSL PARA SERVER.EXAMPLE.TK
   
 Escribe en tu terminal:

    sudo su

    cd /opt/letsencrypt

    sudo ./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/server.example.tk/public_html -d server.example.tk -d server.example.tk --email tuemail@mail.com --agree-tos
  
[5.20] CONFIGURACIÓN SSL PARA
 SERVER.EXAMPLE.TK

     
Escribe en tu terminal:
 

    sudo nano /etc/nginx/sites-available/server.example.tk

        Buscar y comentar:

            listen 80;
            listen [::]:80;
   

        Buscar y descomentar:

            #listen 443 ssl http2;
            #listen [::]:443 ssl http2 ipv6only=on;
      

        Buscar, editar y descomentar:

            #ssl_certificate /etc/letsencrypt/live/server.example.tk/fullchain.pem;
            #ssl_certificate_key /etc/letsencrypt/live/server.example.tk/privkey.pem;

        Buscar y descomentar:
  
Código:
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384smilie19HE-RSA-AES128-GCM-SHA256smilie19HE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHAsmilie19HE-RSA-AES128-SHA256smilie19HE-RSA-AES128-SHAsmilie19HE-DSS-AES128-SHA256smilie19HE-RSA-AES256-SHA256smilie19HE-DSS-AES256-SHAsmilie19HE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIAsmilie19ES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
#ssl_prefer_server_ciphers on;

#ssl_dhparam /etc/ssl/certs/dhparam.pem;

#ssl_session_timeout 1h;
#ssl_session_cache shared:SSL:5m;  
#ssl_stapling on;
#ssl_stapling_verify on;
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
 
Creamos un nuevo servidor que redireccionará todas las peticiones HTTP a HTTPS:


    Buscar, editar y descomentar:
     

            #server {
            #   listen 80;
            #   server_name server.example.tk
            #   return 301 https://$host$request_uri;
            #}

        Guardar con Control + O y salir con Control + X

    sudo service nginx restart

    sudo service php7.0-fpm restart

Acceder al sitio: https://server.example.tk/

    sudo su josantonius
  
[5.21] RESTRINGIR ACCESO A SERVER.EXAMPLE.TK
   
Escribe en tu terminal:
 

    sudo nano /etc/nginx/sites-available/server.example.tk

        Buscar, añadir IP/IPs y descomentar:

            #allow   YOUR-IP-ADDRESS;
            #deny    all;

​        Guardar con Control + O y salir con Control + X

Puedes ver tu dirección IP desde aquí.

A partir de ahora cualquier acceso que no venga desde tu dirección IP será bloqueado:
    

[Imagen: 1476893669_gYq5xxxArLWrkaM.png]
   
[5.22] SECURIZAR PHPMYADMIN
 
Cita:Puedes cambiar el nombre del directorio pma por otro a tu elección. En el caso de que no vayas a utilizar ningún dominio tendrías que crear un enlace simbólico en el directorio /var/www/localhost/public_html/pma en vez de en /var/www/server.example.tk/public_html/pma. Y editar el archivo de configuración sudo nano /etc/nginx/sites-enabled/localhost en vez de sudo nano /etc/nginx/sites-enabled/server.example.tk.
      
Escribe en tu terminal:

    ln -s /usr/share/phpmyadmin /var/www/server.example.tk/public_html/pma
 

    openssl passwd

        Password: pmapass
        Verifying - Password: pmapass

Copiar password:


        pgeMQ4sxNJW7k

   sudo nano /etc/nginx/pma_pass

      Contenido archivo: 

         pmapass:pgeMQ4sxNJW7k
   

        Guardar con Control + O y salir con Control + X

   sudo nano /etc/nginx/sites-enabled/server.example.tk

      Buscar y descomentar:

         #location /pma {
         #
         #   # PROTECCIÓN CON CONTRASEÑA
         #   auth_basic "Acceso Admin";
         #   auth_basic_user_file /etc/nginx/pma_pass;
         #
         #}

        Guardar con Control + O y salir con Control + X

   sudo service php7.0-fpm restart

   sudo service nginx restart


Acceder al sitio: https://server.example.tk/pma/

   Usuario: pmauser
   Contraseña: pmapass
    
[Imagen: 1476892637_fNvDF6n96aPOOm1.png]
   
SI todo ha ido bien veremos el login de PhpMyAdmin:
 

   Usuario: root
   Contraseña: pmapassword
     
[Imagen: 1476893026_LgjCHePnjxXib9N.png]
     
[Imagen: 1476892849_bzH078vBI6pJiVT.png]
 
[5.23] VERIFICAR QUE EL SERVIDOR UTILICE EL PROTOCOLO HTTP2

Podéis ver el protocolo que utiliza vuestro sitio accediendo a alguna de vuestras páginas y mirando en la sección Network en las herramientas para desarrolladores:
  
[Imagen: 1476898142_QShg2edLc1faFJE.png]
   
[6] INSTALAR WORDPRESS
  

Pendiente
     

   
Guías disponibles (En proceso):
 
Servidor Ubuntu 16.04 Medium: Nginx + MariaDB + PageSpeed + GeoIP + LetsEncrypt + Memcached + PHP7 + PhpMyAdmin + GIT + Composer + HHVM + Dominio + Subdominio + Certificado SSL2 con renovación automática + HTTP2 + Wordpress. 
  
Servidor Ubuntu 16.04 Reseller: Nginx + MariaDB + PageSpeed + GeoIP + LetsEncrypt + Memcached + PHP7 + PhpMyAdmin + GIT + Composer + HHVM + Fail2ban + Postfix + BIND + Dovecot + Binutils + RKhunter + SquirrelMail + Pure-FTPD + Vlogger + Webalizer + AWStats + Bind9 + Mailman + Amavisd-new + SpamAssassin + ClamAV & ISPConfig 3 + Dominio + Subdominio + Certificado SSL2 con renovación automática + HTTP2 + Wordpress.  
  
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#2
WoW esta es lo que se dice "la guia definitiva" Big Grin super-completa!!!! ya veo porque no te alcanzaban los 65Kb para este post Smile voy re-inicio todo el proceso y espero llegar hasta aqui jejejee

Todavía no tiene activo HHVM, cierto ?
 
Reply
#3
En serio que esta guia es muy completa, voy a aprovechar mucho porque nunca supe como es el tema de los certificados SSL por ejemplo!
 
Reply
#4
Impresionante!!!! mas tarde vuelvo con preguntas Tongue
 
Reply
#5
¡Pues a por ella se ha dicho!  Big Grin
  
(10-19-2016, 12:52 PM)master escribió: WoW esta es lo que se dice "la guia definitiva" Big Grin super-completa!!!! ya veo porque no te alcanzaban los 65Kb para este post Smile voy re-inicio todo el proceso y espero llegar hasta aqui jejejee

Todavía no tiene activo HHVM, cierto ?
    
Aún quedan 2 para "la guía definitiva"  Smile  En el punto 16 ya no me llegaba xD

La instalación de HHVM será en la próxima guía, esta tiene algunas configuraciones pero comentadas, que lo he hecho así para no tener que andar repitiendo estos pasos en las próximas y solo comentar o descomentar lo que sea.

¡Ya me comentáis! Si seguís paso a paso no debería haber problema... y si lo hay en algún paso, pues comentad antes de seguir con otro y lo miramos.
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#6
Cita:listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

Puede que eso genere error ? veo tu lo cambias pero creo haberlo probado y me decia que tenia duplicado el acceso al puerto 80 o algo asi.
 
Reply
#7
(10-19-2016, 02:56 PM)Bit escribió:
Cita:listen 80 default_server;
listen [::]:80 default_server ipv6only=on;



Puede que eso genere error ? veo tu lo cambias pero creo haberlo probado y me decia que tenia duplicado el acceso al puerto 80 o algo asi.


Eso solo es un aviso, aunque si estás siguiendo las guías paso a paso no debería haber nada duplicado. Dime el punto por el que vas y si puedes poner algo de código o alguna captura, mejor.

Escribe en la consola sudo nginx -t y pegas aquí la salida.
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#8
No te preocupes Jose porque comenté esa linea y seguí para adelante Big Grin oye, muy interesante toda la guia, me ha gustado nuchos tus scripts de renovacion de SSL, re-conexion automatica, etc pero fíjate se te pasaron varios acentos:

Código:
hhvm=`ps awx | grep 'hhvm' |grep -v grep|wc -l`
 
Reply
#9
Esta guia en serio es la más productiva que haya visto, tiene demasiadas tareas automatizadas, muy orientada a la velocidad y ahorro de recursos.
 
Reply
#10
(10-19-2016, 08:45 PM)Bit escribió: No te preocupes Jose porque comenté esa linea y seguí para adelante Big Grin oye, muy interesante toda la guia, me ha gustado nuchos tus scripts de renovacion de SSL, re-conexion automatica, etc pero fíjate se te pasaron varios acentos:
Código:
hhvm=`ps awx | grep 'hhvm' |grep -v grep|wc -l`
   
Ten en cuenta que solo puede haber un "default_server" igual el fallo venía por ahí... Gracias por avisar, aunque al pegarlo en la consola salía bien lo he corregido igualmente Wink 
   
(10-19-2016, 08:48 PM)Donald escribió: Esta guia en serio es la más productiva que haya visto, tiene demasiadas tareas automatizadas, muy orientada a la velocidad y ahorro de recursos.

Siendo justos, la mayoría de esos scripts los podéis encontrar por Internet, no son míos, aunque el de HHVM, si no recuerdo mal sí que lo hice yo. Básicamente es una adaptación de varios tutoriales que he ido adaptando y modificando al tipo de servidor que quería montar. Aunque sí que hay partes que no encontraréis en otras.

¡Me alegro que os sea útl! Blush
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#11
Amigo tu podrás compartir tu AMI ? Smile creo la guia es MUY instructiva y muchos la estamos siguiendo y aprendiendo de ella pero igualmente seria otro gran aporte si compartes alguna AMI Big Grin
 
Reply
#12
' escribió:Amigo tu podrás compartir tu AMI ? Smile creo la guia es MUY instructiva y muchos la estamos siguiendo y aprendiendo de ella pero igualmente seria otro gran aporte si compartes alguna AMI Big Grin
  
Creo que no se pueden descargar. De todas formas no te valdría porque igualmente tienes que hacerle cambios ya que estaría configurado para mis dominios, mi instancia, mi usuario, etc etc... Así que a seguir las guías que es como se aprende... no con 2 clicks y cargando una imagen  Big Grin
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#13
Amigo, cual es la razón de fondo para instalar MariaDB ? estaba leyendo del sitio oficial pero no se me ocurre en que casos me conviene frente a MySQL

https://mariadb.com/kb/es/mariadb-versus...-features/
 
Reply
#14
Hablando de lo mismo, estoy con un problema con MariaDB y es que me acepta cualquier password! he intentado de todo pero no se deja setear, alguna idea ? de por si al final de la instalacion no me preguntó nada.
 
Reply
#15
(10-21-2016, 09:07 AM)Richard escribió: Amigo, cual es la razón de fondo para instalar MariaDB ? estaba leyendo del sitio oficial pero no se me ocurre en que casos me conviene frente a MySQL

https://mariadb.com/kb/es/mariadb-versus...-features/
   
MariaDB es un derivado de MySQL, técnicamente no vas a encontrar grandes diferencias aunque MariaDB supera a MySQL en varios aspectos, por ejemplo Aria, que es un motor de almacenamiento más rápido que MyISAM. 
   
MariaDB es totalmente compatible con MySQL, no depende de Oracle, no tienes que pagar licencias, es 100% open source y no incluye módulos cerrados como 
la versión enterprise de MySQ​L.


(10-21-2016, 09:25 AM)Lanero escribió: Hablando de lo mismo, estoy con un problema con MariaDB y es que me acepta cualquier password! he intentado de todo pero no se deja setear, alguna idea ? de por si al final de la instalacion no me preguntó nada.
    
Qué raro, prueba a restablecer el password para root.
     
Código:
sudo service mysql stop
sudo mysqld_safe --skip-grant-tables &
sudo mysql -u root

use mysql;
update user set password=PASSWORD("TuNuevaContraseña") where user='root';
flush privileges;
quit;

sudo service mysql stop
sudo service mysql start
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#16
José tuve que recomenzar y esta vez me esta siendo muy complicado con muchos fallos..... mira... el servidor funciona Nginx, php 7.0 funciona (lo he probado desde consola) pero no me toma los archivos en \var\www\html



Código:
cat /etc/nginx/sites-available/default

Cita:server {
listen 80 default_server;
#listen [::]:80 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}

La carpeta \var\www\html si contiene el archivo info.php



Que puedo probar ? Smile
 
Reply
#17
(10-21-2016, 02:26 PM)master escribió: Que puedo probar ? Smile
  
Seguramente el archivo de configuración que está leyendo Nginx no sea el de localhost. Si pones:

Código:
​sudo mv /usr/share/nginx/html/index.html  /usr/share/nginx/html/oldindex.html

¿Dejas de ver el index de Nginx?
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#18
¿ Es mejor que PHP-FPM use una conexion TCP o Unix socket ?
 
Reply
#19
Efectivamente! me lo está tomando desde /usr/share/nginx/html/ pero en el archivo de configuracion dice /var/www/html Dodgy

Por otro lado veo que si muevo ahi el .php lo descarga (y siento dejavu por esto Big Grin )
 
Reply
#20
(10-21-2016, 02:55 PM)master escribió: Efectivamente! me lo está tomando desde /usr/share/nginx/html/ pero en el archivo de configuracion dice /var/www/html Dodgy

Por otro lado veo que si muevo ahi el .php lo descarga (y siento dejavu por esto Big Grin )

Cuando sigas la guía paso a paso dejarás de tener dejavu  Big Grin

Eso es porque Nginx está cargando el archivo de /etc/nginx/conf.d/default.conf, que se supone que lo habías eliminado en su momento y ya no debería existir...
  
Cita:Se elimina el contenido para asegurar una sola configuración por defecto:

sudo rm /etc/nginx/conf.d/default.conf



' escribió:¿ Es mejor que PHP-FPM use una conexion TCP o Unix socket ?

Depende del uso que le vayas a dar. Si tuvieras los servicios divididos en varios servidores pues no te quedaría otra que utilizar TCP, que utilizaría toda la pila de la máquina en el tratamiento de los paquetes. Si utilizas un socket donde PHP y Nginx estén instalado en la misma máquina, pues te evitas pasar por todos los protocolos que son necesarios en conexiones TCP/IP y no cargarías tanto el servidor.
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#21
Cita:Depende del uso que le vayas a dar. Si tuvieras los servicios divididos en varios servidores pues no te quedaría otra que utilizar TCP, que utilizaría toda la pila de la máquina en el tratamiento de los paquetes. Si utilizas un socket donde PHP y Nginx estén instalado en la misma máquina, pues te evitas pasar por todos los protocolos que son necesarios en conexiones TCP/IP y no cargarías tanto el servidor.


Se nota tienes supremamente claro el asunto, gracias por la explicación.

Quedo a la espera de la guía Servidor Ubuntu 16.04 Reseller ya que es donde se explica la instalación de Pure-FTPD Smile
 
Reply
#22
hola
Muchas gracias por el tutorial
¿Se  podria usar esta configuracion con ispconfig?  o no funcionaria?
gracias
 
Reply
#23
(11-26-2016, 10:37 AM)aitor43 escribió: hola
Muchas gracias por el tutorial
¿Se  podria usar esta configuracion con ispconfig?  o no funcionaria?
gracias

  
Sí Aitor, totalmente compatible tanto con este como con el tutorial Servidor Ubuntu 16.04 Medium. La configuración del servidor está enfocada para utilizar ISPConfig3. Si te fijas, hay pendiente aún un tutorial más, ahí se intalaría ISPConfig y se configuraría. A ver si tengo más tiempo libre y lo acabo  Smile
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#24
(11-26-2016, 12:19 PM)Josantonius escribió:
(11-26-2016, 10:37 AM)aitor43 escribió: hola
Muchas gracias por el tutorial
¿Se  podria usar esta configuracion con ispconfig?  o no funcionaria?
gracias


  
Sí Aitor, totalmente compatible tanto con este como con el tutorial Servidor Ubuntu 16.04 Medium. La configuración del servidor está enfocada para utilizar ISPConfig3. Si te fijas, hay pendiente aún un tutorial más, ahí se intalaría ISPConfig y se configuraría. A ver si tengo más tiempo libre y lo acabo  Smile


Habria que saltarse algun paso? los que tienen configuracion del dominio?
del  5.12 al 5.21?
no se si el certificado se puede configurar en ispconfig
5.18 hay que hacerlo?
Si tienes tiempo me haces un resumen de los  pasos que no habria que hacer y lo intento

estaria guay que sacaras tiempo  par terminar la guia, estoy seguro que seria la mas completa en español

gracias
 
Reply
#25
Si vas a configurar un dominio en tu servidor no te saltes ningún paso en esta guía. Excepto si no tienes pensado instalar HHVM (que es la próxima guía), que entonces, si no recuerdo mal, puse por ahí algún punto en el que se indica que lo saltes.

Los certificados se pueden añadir desde el ISPConfig, yo lo intenté sin éxito... Me resultaba más fácil hacerlo desde consola y así es como lo haré en la siguiente guía.

El punto 5.18 no es necesario pero sí recomendable... Evitas tener que andar renovando el certificado manualmente, que se te pase de hacerlo, etc...

Aprovechando que tengo que poner en producción un servidor, antes de dos semanas espero haber subido la última guía. Así que si no te corre mucha prisa, te recomiendo que esperes un poco, ya que al igual que cuando subí la segunda guía modifiqué algunas cosas en la primera para que todo fuera más óptimo o para adaptarlo a nuevas versiones, seguramente cuando me ponga con la tercera haré algunos cambios en la primera o segunda. 

Gracias, espero que te sea útil, ¡Un saludo!
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#26
Perdona pero entonces no entiendo  los puntos  en los que usas la configuracion para  exemple.tk
como  en el paso 5.12

Escribe en tu terminal:

    mkdir -p /var/www/example.tk/public_html 

    sudo chown josantonius:www-data /var/www -R

    sudo cp /etc/nginx/sites-available/localhost /etc/nginx/sites-available/example.tk

    sudo nano /etc/nginx/sites-available/example.tk

sudo nano /etc/nginx/sites-available/example.tk


Por que si usamos ispconfig estos archivos se crean solos  al crear un  web-site
primero se instalaria ispconfig
se crearia el site
y despues se modifican los archivos
Es posible que las rutas no coincidan
No se si estoy diciendo bobadas por que estoy en aprendiendo
gracias
 
Reply
#27
(11-26-2016, 05:11 PM)aitor43 escribió: Perdona pero entonces no entiendo  los puntos  en los que usas la configuracion para  exemple.tk
como  en el paso 5.12

Escribe en tu terminal:

    mkdir -p /var/www/example.tk/public_html 

    sudo chown josantonius:www-data /var/www -R

    sudo cp /etc/nginx/sites-available/localhost /etc/nginx/sites-available/example.tk

    sudo nano /etc/nginx/sites-available/example.tk

sudo nano /etc/nginx/sites-available/example.tk


Por que si usamos ispconfig estos archivos se crean solos  al crear un  web-site
primero se instalaria ispconfig
se crearia el site
y despues se modifican los archivos
Es posible que las rutas no coincidan
No se si estoy diciendo bobadas por que estoy en aprendiendo
gracias
  
Hacerse se puede hacer de muchas maneras y de diferente órden, pero las guías están pensadas para que sirvan para quien quiera desde lo más básico hasta más complejo y hay que hacerlo de manera incremental.
  
Empezar por ISPConfig sería  innecesario para quien solo quiere montar un server en local. 
  
Si quieres instalar el dominio desde el ISPConfig pues sátate esos pasos  Big Grin  Pero los cambios luego son triviales, una vez que se tenga instalado ISPConfig, crear el dominio y sustituir, editar o mover algunos archivos.
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#28
No te creas que los cambios son tan tribiales cuando no tienes mucha idea cualquier cosa te vuelve loco.
Por eso te pregunte que pasos me tenia que saltar y modificar despues  por que ami no me parece todo trivial  y podia estar equivocado
¿Te planteas usar varnish o implentarlo en la guia? es compatible con memcache?

gracias
 
Reply
#29
Cita:No te creas que los cambios son tan tribiales cuando no tienes mucha idea cualquier cosa te vuelve loco.

Debo acordar, las guias son impecables pero cometí muchísimos errores cuando las estaba siguiendo.
 
Reply
#30
(11-27-2016, 07:25 AM)aitor43 escribió: No te creas que los cambios son tan tribiales cuando no tienes mucha idea cualquier cosa te vuelve loco.
Por eso te pregunte que pasos me tenia que saltar y modificar despues  por que ami no me parece todo trivial  y podia estar equivocado
¿Te planteas usar varnish o implentarlo en la guia? es compatible con memcache?

gracias
       
Cierto, pero como se explicarían paso por paso en la tercera guía, pasarían a serlo, ya que solo es seguir las indicaciones.
    
Sí, Varnish y Memcached son compatibles. Lo utilizo en varios sitios pero en principio no tengo pensado implementado en la tercera guía. 
   
(11-27-2016, 10:03 AM)master escribió:
Cita:No te creas que los cambios son tan tribiales cuando no tienes mucha idea cualquier cosa te vuelve loco.


Debo acordar, las guias son impecables pero cometí muchísimos errores cuando las estaba siguiendo.
     
O igual hay algunos errores en ellas... puede ser, son largas y algo se ha podido escapar. Cuando me ponga con la tercera repasaré las 2 anteriores por si se me pasó algo  Big Grin
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#31
(11-26-2016, 03:49 PM)Josantonius escribió: Si vas a configurar un dominio en tu servidor no te saltes ningún paso en esta guía. Excepto si no tienes pensado instalar HHVM (que es la próxima guía), que entonces, si no recuerdo mal, puse por ahí algún punto en el que se indica que lo saltes.

Los certificados se pueden añadir desde el ISPConfig, yo lo intenté sin éxito... Me resultaba más fácil hacerlo desde consola y así es como lo haré en la siguiente guía.

El punto 5.18 no es necesario pero sí recomendable... Evitas tener que andar renovando el certificado manualmente, que se te pase de hacerlo, etc...

Aprovechando que tengo que poner en producción un servidor, antes de dos semanas espero haber subido la última guía. Así que si no te corre mucha prisa, te recomiendo que esperes un poco, ya que al igual que cuando subí la segunda guía modifiqué algunas cosas en la primera para que todo fuera más óptimo o para adaptarlo a nuevas versiones, seguramente cuando me ponga con la tercera haré algunos cambios en la primera o segunda. 

Gracias, espero que te sea útil, ¡Un saludo!

Hola Josantonius pusiste en marcha el servidor? ¿como va la guia?

saludos
 
Reply
#32
(12-14-2016, 02:39 PM)aitor43 escribió:  
Hola Josantonius pusiste en marcha el servidor? ¿como va la guia?
 
saludos

Hola Aitor,
  
Pues no, no he tenido tiempo... y eso que está pagado desde hace cerca de 2 meses  Undecided
  
Espero hacerlo entre esta y la semana que viene, pero a ver cómo se da la cosa...
  
¡Un saludo!
[Imagen: 1489128820_fbsnVWR5Pg5WrzX.png]
 
Reply
#33
hola Joseantonius as tenido tiempo de poner en marcha el servidor?
saludos
 
Reply
  


Salto de foro:


Browsing: 1 invitado(s)