The HTTP Fundamentals and Nginx Web Server Training Course is designed to provide participants with a comprehensive understanding of the Hypertext Transfer Protocol (HTTP) and practical skills in Nginx web server administration. Through a combination of lectures, hands-on exercises, and real-world examples, participants will learn the foundational concepts of HTTP, including request/response cycle, status codes, headers, and methods, as well as the setup, configuration, and optimization of Nginx web servers. By the end of the course, participants will be equipped to design, deploy, and manage high-performance web server environments using Nginx.
Duration 5 days – 35 hrs
Prerequisite
- Basic understanding of web development concepts.
- Familiarity with JavaScript programming language.
- Comfortable using the command line interface.
- Access to a computer with a modern web browser.
- Willingness to learn and explore automated testing principles
Objectives
- Gain proficiency in creating their first Cypress project, including installation, setting up project structure, and running Cypress GUI.
- Understand the application.visit() command, basic configuration options, and effectively utilize the browser for test automation.
- Learn various methods of selecting elements on a page and strategies for using selectors effectively.
- Participants will write their first test, covering basic scenario automation, debugging techniques, and interpreting error messages effectively.
- Understand best practices for writing assertions in end-to-end tests to ensure reliable and accurate test results.
- Learn effective command-chaining techniques and understand how information is passed through commands to enhance test readability and maintainability.
- Understand how to test dynamic pages using built-in retryability features to handle constantly re-rendering sites effectively.
- Gain proficiency in handling data within tests, including saving, aliasing, and passing information throughout the test flow for better test management.
- Participants will learn to create custom commands to abstract test logic into separate commands, thus expanding the Cypress library with their reusable commands.
- Understand how to intercept network requests using the cy. intercept() command to simulate edge cases and ensure comprehensive test coverage.
- Gain proficiency in API testing principles, including testing data from APIs and using cy. request() to prepare and handle test data effectively.
- Learn how to install useful plugins to solve common testing problems from the open-source community and enhance test automation capabilities.
- Understand how to handle authentication flows, including caching a logged-in state of the browser and managing backend authentication securely.
- Learn to run Node.js scripts in tests, switch between different environments, test in headless mode, and set up a simple CI workflow for continuous integration.
Audience
- Quality Assurance Engineers: Professionals responsible for ensuring the quality of software products through testing and automation, seeking to enhance their skills in automated testing using Cypress.
- Test Automation Engineers: Individuals specializing in test automation, interested in learning Cypress as a tool for automating end-to-end testing of web applications.
- Software Developers: Developers interested in incorporating automated testing into their workflow, particularly those involved in frontend development and interested in testing web applications using Cypress.
- DevOps Engineers: Engineers responsible for implementing continuous integration and continuous deployment (CI/CD) pipelines, interested in incorporating Cypress tests into their automation workflows.
- Software Testers: Testing professionals at various levels of experience who want to learn Cypress to enhance their testing capabilities and improve the efficiency of their testing processes.
- QA Managers: Managers overseeing quality assurance processes and teams, interested in understanding Cypress to make informed decisions about test automation strategies and tooling.
- Web Developers: Frontend developers interested in understanding how to write automated tests for their web applications using Cypress to ensure code quality and prevent regressions.
- IT Professionals: Professionals from various IT backgrounds interested in learning about modern test automation tools and techniques, particularly those involved in web application development and testing.
- Anyone Interested in Automated Testing: Individuals from different domains who want to learn about automated testing and Cypress as a tool for creating and running automated tests for web applications.
Course Outline
HTTP/1.x protocol
- Request and response format
- Inspecting HTTP conversations with tcpdump and Wireshark
- Inspecting HTTP headers in a web browser
- Making requests with CURL
- Common headers
- Request pipelining
- Content length and chunked encoding
- MIME types
Nginx installation
- Installing nginx from Debian packages
- Variants of nginx available in Debian and Ubuntu
- Installing nginx from source
- Starting nginx
- Upgrading nginx
Nginx as a static file server
- General structure of the configuration file
- Setting up virtual hosts
- Configuring locations
- Location lookup order
- Setting up error pages
- Issuing redirects
- Other forms of URL rewriting
- Serving an empty GIF image
- Internal and named locations
- Overriding MIME types
Client-side performance optimization
Allowing clients to cache resources
The Vary: header
Minimizing the number of requests
Keep-alives
What if a resource needs to change
How web frameworks deal with static files
Content post-processing
Gzip compression
Image scaling
Access control
Restricting access to files based on IP address
Geographical restrictions
Hiding VCS directories and private files
Basic authentication
Other types of authentication
Combining restrictions
Secure links
Applying limits
Traffic shaping
Grouping requests for the purpose of limiting
Rate-limiting requests
Restricting simultaneous connections
Nginx as a reverse proxy
Supported upstream protocols
Dealing with self-signed upstream SSL certificates
Passing parameters to FastCGI and uWSGI backends
Proxying websocket connections
X-Accel-* headers
Modifying headers received and sent by upstream
Language-specific reverse proxy setups
PHP
Python
Ruby
Nginx as an SSL terminator
Generating self-signed SSL certificates
Obtaining certificates from Let’s Encrypt
Restricting available ciphers
Working with session tickets
Stapling OCSP responses
Verifying SSL configuration
Accepting client-side certificates
HTTP/2 considerations
Load balancing with Nginx
Defining upstream groups
Sticky sessions using ip_hash
Extra features of Nginx Plus as a load balancer
Alternatives to Nginx and Nginx Plus
Putting another Nginx behind a Nginx load balancer
Nginx behind HAProxy or AWS load balancer
Nginx as a cache
Telling nginx to cache pages
How nginx reacts to standard caching-related headers
Tunable parameters of caches
Nginx cache vs application-level cache
Clearing the cache
Deploying popular web applications with Nginx
The list of applications to be discussed is determined by the trainer
Logging
Access log and error log files
Specifying custom log format
Tracking slow requests
Optimizing logging
Log rotation
Log analysis by external programs
Monitoring Nginx
Nginx stub status page
Nginx Plus extended live status page
What monitoring systems usually plot and alert about Nginx
[optional] High availability with Nginx¹
How to deploy the same static content to multiple servers
Configuration sharing
Fail-over using an elastic/virtual IP address
Setting up VRRP with Keepalived
Other high-availability stacks
Nginx Plus integration with Keepalived
Common mistakes and security issues related to Nginx configuration
Common performance issues


